【问题标题】:libevent : whether event can be triggered if the related socket is closed by local programlibevent : 如果相关套接字被本地程序关闭,是否可以触发事件
【发布时间】:2013-06-20 13:16:39
【问题描述】:

如果我为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 还是任何其他情况?

谢谢!

【问题讨论】:

    标签: network-programming libevent


    【解决方案1】:

    如果套接字被另一端很好地关闭,则所有套接字都被标记为可读,read 返回零。当收到错误时,它们被标记为可读或可写,readwrite 返回-1

    参见例如socket(7) manual page 用于状态表。

    【讨论】:

    • 我指的是本地程序,而不是另一端
    • @user1944267 您想知道自己何时关闭套接字?这取决于您来跟踪,例如从所有用于轮询的集合中移除已关闭的套接字。
    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多