Инкапсулировать простую сетевую библиотеку на Libevent, чтобы облегчить построение серверов и клиентов TCP/UDP/UNIX.
Пример интерфейса:
int ts_accept_fun (int sfd, int cfd, struct sockaddr *addr, int addrlen)
{
fprintf (stderr, "[srv] принять srv_fd: %d, cli_fd: %d, addrlen: %d n", sfd, cfd, addrlen);
возврат 0;
}
// PKG является полным пакетом протокола приложений, клиент используется для указания протокола распаковки PKG
int ts_pkg_fun (int sock, struct sockaddr *addr, unsigned int addrlen, const char *pkg, unsigned int pkglen, unsigned int headcmd)
{
fprintf (stderr, "[srv] sock: %d, pkg: %s, pkg_len: %d, head_cmd: %d n", sock, pkg, pkglen, headcmd);
возврат 0;
}
int ts_close_fun (int sock)
{
fprintf (stderr, "[srv] cli sock: %d close n", sock);
возврат 0;
}
int ts_timer_fun ()
{
fprintf (stderr, "[srv] Timer Exec, время: %d n", time (null));
возврат 0;
}
void test_tcp_srv ()
{
const char *ip = "127.0.0.1";
Unsigned int port = 1235;
ev_srv_init (& evsrv);
int iret = ev_srv_bind_ip (& evsrv, ip, port, ts_accte_fun, ts_pkg_fun, ts_close_fun, 0, -1, 5);
Yg_assert_ret (iRet> 0,);
iRet = ev_srv_add_timer (& evsrv, ts_timer_fun, 1000 * 3);
Yg_assert_ret (iRet> = 0,);
ev_srv_run (& evsrv);
}
тест: