Encapsulez une bibliothèque de réseaux simples sur LiBevent pour faciliter la construction de serveurs et clients TCP / UDP / UNIX.
Exemple d'interface:
int ts_accept_fun (int sfd, int cfd, struct sockaddr * addr, int addrlen)
{
fprintf (stderr, "[srv] accepter srv_fd:% d, cli_fd:% d, addrlen:% d n", sfd, cfd, addrlen);
retour 0;
}
// PKG est un package complet de protocole de couche d'application, HeadCMD est utilisé par le client pour indiquer le protocole de déballage 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);
retour 0;
}
int ts_close_fun (int sock)
{
fprintf (stderr, "[srv] sock:% d close n", sock);
retour 0;
}
int ts_timer_fun ()
{
fprintf (stderr, "[srv] temporaire, temps:% d n", time (null));
retour 0;
}
void test_tcp_srv ()
{
const char * ip = "127.0.0.1";
intort int non signé = 1235;
ev_srv_init (& evsrv);
int iret = ev_srv_bind_ip (& evsrv, ip, port, 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);
}
test: