[英]Closing a server socket in C linux
我有一个看起来像这样的服务器程序
{
socket();
bind();
listen();
while(1)
{
accept();
recv();
send();
close();
}
close();
}
假设服务器正在运行,正在侦听指定端口。 如何按键盘将其关闭? 我的意思是适当的关闭,而不是按Ctrl + C。
当close()
一个阻塞accept()
close()
的套接字时, accept()
调用将立即以-1返回。
如果您的程序像您显示的那样是单线程的,那么您将无法执行上述操作。 您可能需要引入至少一个其他线程才能实际执行close()
。
让程序安装一个不执行任何操作的信号处理程序(例如SIGUSR1
)。
使用setsockopt()
可以为使用中的套接字取消设置选项SA_RESTART
。
使发出套接字相关系统调用的代码知道它们可能会返回-1
并且errno
设置为EINTR
。
运行程序。
从外部向其发送信号,表明该程序已安装了处理程序(在1.中)(例如,使用kill <pid> -USR1
命令)。
检测信号的接收(请参阅3.)并作出反应,例如通过close()
有问题的套接字来close()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.