可以在没有连接的情况下接受()返回吗?

时间:2011-05-05 12:19:19

标签: sockets

我有一个阻塞TCP套接字,它在accept()调用时阻塞。是否可以进行accept()调用返回(除了从客户端获取连接)?这是为了在系统关闭时关闭套接字并退出接受连接的线程。

3 个答案:

答案 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)。