我有一个阻塞TCP套接字,它在accept()
调用时阻塞。是否可以进行accept()
调用返回(除了从客户端获取连接)?这是为了在系统关闭时关闭套接字并退出接受连接的线程。
答案 0 :(得分:4)
1)在单线程程序中,您可以使用来自其他进程的信号。确保在安装信号处理程序时不传递SA_RESTART标志。
2)如果您需要从同一进程的另一个线程中停止accept()
,请在套接字和此管道上的select()
上创建一个套接字对话框或管道并阻塞。当您需要取消阻止时,请将某些内容写入管道。
3)或者只使用select()
进行一些小的超时(1秒)并在每次返回时轮询退出标志。
答案 1 :(得分:3)
在flags参数中使用SOCK_NONBLOCK:http://www.linuxhowtos.org/manpages/2/accept.htm
答案 2 :(得分:0)
在Windows中,如果您关闭接受连接(调用closesocket()),WSA将取消接受(接受将返回INVALID_SOCKET)。