如果我为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
或任何其他情况?
谢谢!
如果套接字被另一端很好地关闭,则所有套接字都标记为可读,read
返回零。当接收到错误时,它们被标记为可读或可写,read
或write
返回-1
。
参见socket(7)手册页中的状态表