如果我在事件循环中添加特定套接字的事件,例如,TCP连接套接字。然后可能发生插座关闭的情况,那么libevent会怎么做呢?它能检测到吗?
谢谢!
编辑:我想我一开始误解了你的问题。
如果您的意思是套接字从远端关闭
根据文档,您可以使用event_new()
和event_add()
调用来注册对套接字的兴趣。确保指定EV_READ
,因为您感兴趣的是套接字何时关闭。
请记住,可读取的数据和已关闭的套接字在文件描述符就绪程度上没有区别。通常你必须读取套接字来找出哪个条件为真,但是如果你不想读取套接字,那么你可以在这里寻找提示。
如果您的意思是套接字已在本地关闭(文件描述符已关闭)
在文件描述符关闭后使用它是没有定义的,并且总是会导致未定义的结果。这并不是libevent所特有的。在关闭文件描述符之前,必须确保程序中没有其他线程正在使用它,并且必须确保程序的其他部分将来不会尝试使用它。这意味着在关闭libevent的同时取消注册文件描述符。