[英]Closing a server socket in C linux
我有一個看起來像這樣的服務器程序
{
socket();
bind();
listen();
while(1)
{
accept();
recv();
send();
close();
}
close();
}
假設服務器正在運行,正在偵聽指定端口。 如何按鍵盤將其關閉? 我的意思是適當的關閉,而不是按Ctrl + C。
當close()
一個阻塞accept()
close()
的套接字時, accept()
調用將立即以-1返回。
如果您的程序像您顯示的那樣是單線程的,那么您將無法執行上述操作。 您可能需要引入至少一個其他線程才能實際執行close()
。
讓程序安裝一個不執行任何操作的信號處理程序(例如SIGUSR1
)。
使用setsockopt()
可以為使用中的套接字取消設置選項SA_RESTART
。
使發出套接字相關系統調用的代碼知道它們可能會返回-1
並且errno
設置為EINTR
。
運行程序。
從外部向其發送信號,表明該程序已安裝了處理程序(在1.中)(例如,使用kill <pid> -USR1
命令)。
檢測信號的接收(請參閱3.)並作出反應,例如通過close()
有問題的套接字來close()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.