【发布时间】:2013-05-22 22:52:29
【问题描述】:
如果我将特定套接字的事件添加到事件循环, 例如,一个 TCP 连接套接字。 那么可能会发生套接字关闭, 那么 libevent 将如何行动呢? 它可以检测到这个吗?
谢谢!
【问题讨论】:
-
您的标题和您的问题不一致。您的标题的答案是它没有检测到对等方的关闭,它只是检测到一个读取事件。
标签: sockets network-programming libevent
如果我将特定套接字的事件添加到事件循环, 例如,一个 TCP 连接套接字。 那么可能会发生套接字关闭, 那么 libevent 将如何行动呢? 它可以检测到这个吗?
谢谢!
【问题讨论】:
标签: sockets network-programming libevent
编辑:我想我一开始误解了你的问题。
根据文档,您可以使用event_new() 和event_add() 调用来注册对套接字的兴趣。确保指定EV_READ,因为您对套接字何时关闭感兴趣。
请记住,可供读取的数据和关闭的套接字之间的文件描述符准备情况没有区别。通常您必须阅读套接字以找出哪个条件为真,但如果您不想阅读套接字,则可以查看here 以获得提示。
在关闭文件描述符后使用它永远不会被定义,并且总是会导致未定义的结果。这不是特定于 libevent。在关闭文件描述符之前,您必须确保程序中没有其他线程正在使用它,并且您必须确保程序的其他部分将来不会尝试使用它。这意味着在您关闭它的同时从 libevent 注销文件描述符。
【讨论】:
n=recv(fd,...) 如果 n = 0,则表示远程套接字发送 FIN/ACK ,如果 n=-1,则可能是RST数据包与否