繁体   English   中英

用C编写的Linux TCP / IP服务器中的Ctrl-C处理

[英]Handling Ctrl-C in a Linux TCP/IP Server written in C

我目前在Linux TCP / IP服务器上工作。 该服务器程序正在C中运行。我目前正在对其进行测试,但是每次使用Ctrl-c退出该服务器时,它所使用的端口都不会释放,它写入的数据库也不会被解锁。 如何定义一个子例程,当收到Ctrl + C信号时将退出该子例程?

两种选择:

  1. 添加以下清理例程: int atexit(void(* function)(void));
  2. sighandler_t signal(int signum,sighandler_t handler)钩住 Ctrl + C ;

正如R所指出的那样, 签名信号更可移植,但对于Linux来说可能更不习惯。

警告:如果您的程序被SIGKILL(Ctrl + /)杀死或收到任何其他未处理的信号,则atexit例程将不会运行。

查找setsockoptSO_REUSEADDR 必须在旧的原始服务器进程的套接字上设置此选项,否则新的进程将无法绑定端口,直到TIME_WAIT期限到期为止。

@Bortds通常不会立即释放该端口,您必须等待一段时间。 我从我工作的服务器项目中发现了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM