我使用C语言编写了一个服务器。
我使用accept()
函数使我的服务器监听指定的套接字。
我的服务器在一个线程中启动。
现在,在另一个线程中,针对某些条件,我想停止accept()
阻塞并关闭相关的套接字。
我该如何做呢?shutdown()
函数能实现这一功能吗?
我使用C语言编写了一个服务器。
我使用accept()
函数使我的服务器监听指定的套接字。
我的服务器在一个线程中启动。
现在,在另一个线程中,针对某些条件,我想停止accept()
阻塞并关闭相关的套接字。
我该如何做呢?shutdown()
函数能实现这一功能吗?
[这在Windows上不起作用]
使用sigaction()
为SIGUSR1
安装一个信号处理程序,什么也不做,但将SA_RESTART
选项取消设置(还请参阅此手册页上的“由信号处理程序中断系统调用和库函数”部分)。
然后向阻塞进程发送SIGUSR1
信号。
accept()
将返回-1
并将errno
设置为EINTR
。
我在Linux Mint 18.3下仅调用close
关闭套接字后,遇到了accept
未终止的问题。我通过在close
之前也调用shutdown(socket_fd, SHUT_RD);
来解决它。
mah已经提到了这一点,但我想强调一下,因为这是谷歌搜索“socket stop accept”的第一个SO结果。
accept()
所在的套接字。也许shutdown()
会这样做。你尝试过吗? - mah