簡體   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