Kapitulieren Sie eine einfache Netzwerkbibliothek auf LibEvent, um den Bau von TCP/UDP/UNIX -Servern und Clients zu erleichtern.
Schnittstellenbeispiel:
int ts_accept_fun (int sfd, int cfd, struct sockaddr *addr, int addrlen)
{
fprintf (stderr, "[srv] akzeptieren srv_fd: %d, cli_fd: %d, addrlen: %d n", sfd, cfd, addrlen);
Rückkehr 0;
}
// PKG ist ein komplettes Anwendungsschichtprotokollpaket. HeadCMD wird vom Client verwendet, um das PKG -Auspackenprotokoll anzugeben
int ts_pkg_fun (int sock, struct sockaddr *addr, unsigned int addrlen, const char *pkg, unsigned int pkglen, unsigned int latcmd)
{
fprintf (stderr, "[srv] sock: %d, pkg: %s, pkg_len: %d, head_cmd: %d n", sock, pkg, pkglen, headcmd);
Rückkehr 0;
}
INT TS_CLOSE_FUN (INT -Socke)
{
fprintf (stderr, "[srv] cli sock: %d close n", sock);
Rückkehr 0;
}
int ts_timer_fun ()
{
fprintf (stderr, "[srv] Timer Exec, Zeit: %d n", Zeit (null));
Rückkehr 0;
}
void test_tcp_srv ()
{
const char *ip = "127.0.0.1";
nicht signiert int port = 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);
}
prüfen: