[英]Handling Ctrl-C in a Linux TCP/IP Server written in C
我目前在Linux TCP / IP服务器上工作。 该服务器程序正在C中运行。我目前正在对其进行测试,但是每次使用Ctrl-c退出该服务器时,它所使用的端口都不会释放,它写入的数据库也不会被解锁。 如何定义一个子例程,当收到Ctrl + C信号时将退出该子例程?
两种选择:
正如R所指出的那样, 签名比信号更可移植,但对于Linux来说可能更不习惯。
警告:如果您的程序被SIGKILL(Ctrl + /)杀死或收到任何其他未处理的信号,则atexit例程将不会运行。
查找setsockopt
和SO_REUSEADDR
。 必须在旧的原始服务器进程的套接字上设置此选项,否则新的进程将无法绑定端口,直到TIME_WAIT
期限到期为止。
@Bortds通常不会立即释放该端口,您必须等待一段时间。 我从我工作的服务器项目中发现了这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.