تغليف مكتبة شبكة بسيطة على 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 هي حزمة بروتوكول طبقة تطبيق كاملة ، يتم استخدام HeadCMD من قبل العميل للإشارة إلى بروتوكول تفريغ PKG
int ts_pkg_fun (int sock ، struct sockaddr *addr ، int addrlen غير موقعة ، const char *pkg ، int pkglen غير موقعة ، int headcmd)
{
FPRINTF (Stderr ، "[SRV] SOCK: ٪ D ، PKG: ٪ S ، PKG_LEN: ٪ D ، Head_CMD: ٪ D n" ، Sock ، 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" ، الوقت (null)) ؛
العودة 0 ؛
}
void test_tcp_srv ()
{
const char *ip = "127.0.0.1" ؛
منفذ int غير موقّع = 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) ؛
}
امتحان: