Encapsular uma biblioteca de rede simples no Libevent para facilitar a construção de servidores e clientes TCP/UDP/UNIX.
Exemplo de interface:
int ts_accept_fun (int sfd, int cfd, struct sockaddr *addr, int addrlen)
{
fprintf (stderr, "[srv] aceita srv_fd: %d, cli_fd: %d, addrlen: %d n", sfd, cfd, addrlen);
retornar 0;
}
// pkg é um pacote completo de protocolo de camada de aplicativo, o headcmd é usado pelo cliente para indicar o protocolo de descompacagem do PKG
int ts_pkg_fun (int sock, struct sockaddr *addr, não assinado int addrlen, const char *pkg, não assinado int pkglen, não assinado intcmd)
{
fprintf (stderr, "[srv] meia: %d, pkg: %s, pkg_len: %d, head_cmd: %d n", meia, pkg, pkglen, headcmd);
retornar 0;
}
int ts_close_fun (int sock)
{
fprintf (stderr, "[srv] cli meia: %d close n", meia);
retornar 0;
}
int ts_timer_fun ()
{
fprintf (stderr, "[srv] timer exec, tempo: %d n", tempo (nulo));
retornar 0;
}
void test_tcp_srv ()
{
const char *ip = "127.0.0.1";
Porta int não assinada = 1235;
ev_srv_init (& eVSRV);
int iret = ev_srv_bind_ip (& evsrv, ip, porta, ts_accept_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);
}
teste: