我目前正在使用Linux TCP/IP服务器。服务器程序使用C语言运行。我目前正在测试它,但每次使用Ctrl-c退出时,它所使用的端口都不会被释放,也不会释放它正在写入的数据库以解锁。如何定义在接收到Ctrl + C信号时将退出的子程序?在C编写的Linux TCP/IP服务器中处理Ctrl-C
回答
两个选项:
- 与添加一个清除例程:int atexit(void (*function)(void));
- 钩按Ctrl + C具有:sighandler_t signal(int signum, sighandler_t handler);
作为R指出,sigaction比signal更便携,但也许Linux的习惯较少。
警告:如果程序用SIGKILL(Ctrl + /)或任何其他未处理的信号收到而终止程序,atexit例程将不会运行。
我不认为这是问题。 – 2010-11-21 02:48:34
关于套接字问题,我同意你的答案。与数据库连接,但是... – jtdubs 2010-11-21 02:49:52
啊,我懒得看问题的后半部分。我同意数据库。它是一个需要的信号处理程序,而不是'atexit'。当进程死于未处理的信号时,使用'atexit'注册的函数将不会运行。 – 2010-11-21 02:52:44
查找setsockopt
和SO_REUSEADDR
。该选项必须在旧的原始服务器进程的套接字上设置,否则在TIME_WAIT
期限到期之前,新的套接字将无法绑定端口。
@Bortds通常情况下,端口不会立即释放,您必须等待一段时间。我从我工作的一个服务器项目中找到了这个。
@everybody看来R ..的答案是我的答案的超集。 – prabhakaran 2011-12-22 07:46:44
- 1. TCPIP服务器单连接
- 2. 如何在linux中编写一个http1.0代理服务器?
- 3. 在C#.NET中编写服务器以处理自定义请求/响应
- 4. 在.NET(C#或VB.NET)中编写代理服务器?
- 5. 编写客户在C /服务器程序Unix服务器
- 6. iPhone的Objective-C的服务处理器
- 7. 在Linux中的C++网络编程:服务器问题
- 8. 处理JS服务器端
- 9. 在服务器上处理
- 10. Linux服务器编程
- 11. FTP服务器用C#编写
- 12. 在java中编写BBS服务器
- 13. 在AS3中处理服务器响应
- 14. 在Linux服务器上编译Android .apk
- 15. 服务器错误在Linux编程PHP
- 16. 处理Microsoft Exchange服务器
- 17. 如何在linux ubuntu 10.04中编写批处理命令?
- 18. 如何在Windows批处理中编写管道命令Linux?
- 19. 如何编写批处理脚本来安装atg在linux中?
- 20. 如何处理跨Linux服务器的ValidateAntiForgeryToken
- 21. 如何在原始C中编写COM服务器?
- 22. 在C中编写卷影服务器作家#
- 23. 写代理服务器
- 24. 图像处理服务器
- 25. 如何在boost tcp/udp服务器中处理control-c
- 26. 在C++中处理单个服务器和多个客户端
- 27. 如何在C#中处理webdav服务器XML请求#
- 28. Flotr&服务器端处理
- 29. 如何用C#编写的JSON启用WCF服务的服务器端在asp.net
- 30. Android的代理服务器 - 处理HTTPS
你试过用CTRL + Z吗? – 2010-11-21 02:44:04
ctrl + z不结束进程,它只是暂停它。 – jtdubs 2010-11-21 02:51:24