关闭套接字并选择()

时间:2010-03-28 14:35:21

标签: unix sockets

所以我需要关闭一个特定的连接,但问题是另一个线程同时做一个select(),它将套接字作为它正在观察的文件描述符之一。

select()会优雅地终止,还是会发生什么不好?

2 个答案:

答案 0 :(得分:0)

我不是百分百肯定,但如果你在select()启动后关闭套接字,则不会发生任何不好的事情。如果您在开始时将已经已关闭的套接字传递给它,则select()会返回错误(请参阅man page)。

此外,如果您使用select()等待数据读取,它可能会将此已关闭的套接字报告为已准备好进行读取(因为读取不会在已关闭的套接字上阻止)。

您可以编写一个简单的程序,并实际检查系统上会发生什么。

答案 1 :(得分:0)

看到答案,我得到了几乎相同的问题:

Wake up thread blocked on accept() call

简短回答:让你的select call等待两个文件句柄:套接字和管道的读取端。