我目前正在使用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. C linux代理服務器
- 3. 如何在linux中編寫一個http1.0代理服務器?
- 4. 在C中編寫網絡服務器
- 5. 在C#.NET中編寫服務器以處理自定義請求/響應
- 6. 處理在服務器上的.NET C#
- 7. Linux服務器用於音頻處理
- 8. 在.NET(C#或VB.NET)中編寫代理服務器?
- 9. 編寫客戶在C /服務器程序Unix服務器
- 10. iPhone的Objective-C的服務處理器
- 11. 在zip中編寫unicode文件名php(linux服務器)
- 12. 在Linux中的C++網絡編程:服務器問題
- 13. 處理JS服務器端
- 14. 在服務器上處理
- 15. Linux服務器編程
- 16. 如何在C++中編寫Android服務
- 17. FTP服務器用C#編寫
- 18. Linux線程C服務器
- 19. 在linux服務器上的C++ cgi
- 20. 處理分割(服務器)
- 21. 處理從服務器
- 22. 如何在處理電子郵件服務器時處理代理服務器?
- 23. 在java中編寫BBS服務器
- 24. 如何編寫遠程DataModule以在Linux服務器上運行?
- 25. 在Linux上編寫多線程TCP服務器
- 26. 在AS3中處理服務器響應
- 27. 在Android中處理服務器響應
- 28. 在asp.net中處理服務器錯誤
- 29. 服務器錯誤在Linux編程PHP
- 30. 在Linux服務器上編譯Android .apk
你試過用CTRL + Z嗎? – 2010-11-21 02:44:04
ctrl + z不結束進程,它只是暫停它。 – jtdubs 2010-11-21 02:51:24