如果我为accept()返回的连接套接字添加一个事件,如下所示
event_set(&conn_ev, connfd, EV_READ|EV_PERSIST, on_recv, NULL);
event_base_set(base, &conn_ev);
event_add(&conn_ev, NULL);
如果在某个时候,本地程序(不是对等方)关闭套接字,conn_ev
会被触发吗?
如果是这样,如何检测事件是否是由于套接字的关闭?
是recv(connfd,..)返回-1而errno是设置EBAD
还是其他任何情况?
谢谢!
答案 0 :(得分:0)
如果套接字被另一端很好地关闭,所有套接字都被标记为可读,read
返回零。收到错误后,会将其标记为已读或可写,read
或write
返回-1
。
参见例如国家表的socket(7) manual page。