c++如何使用 select 来查看套接字是否已关闭
有人可以给我提供一个如何使用 select() 来查看客户端是否已关闭套接字上的连接的示例吗?
供参考。我正在使用Linux。
谢谢!
Can someone provide me an example of how to use select() to see if a client has closed the connection on a socket?
FYI. I'm using linux.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
下面的代码片段首先检查套接字是否标记为可读(关闭时为可读),然后检查是否确实有任何内容可供读取。
The below snippet first checks if the socket is marked readable (which it is when closed) and then if there's actually anything to be read.
您不需要执行
select()
,然后执行ioctl()
。您可以对套接字进行非阻塞查看,看看它是否返回0
。You don't need to do a
select()
followed byioctl()
. You can instead do a non-blocking peek on the socket to see if it returns0
.如果您收到读取通知并且读取返回 0 字节,则客户端已完全退出。如果没有,您将收到异常通知。
If you get a read notification and the read returns 0 bytes the client has exited cleanly. If not you will get an exception notification.
下面是一个示例,用于检查套接字是否被对等方关闭,而无需在接收缓冲区非空的情况下读取套接字。
Here is an example to checks if the socket is closed by peer WITHOUT reading form it in case of non-empty recv buffer.