2014-05-21 119 views
2

我有一個使用tcp套接字進行通信的程序(C++編譯)。程序配置爲兩種模式。比方說,模式A和模式B.當「ctrl c」用於終止程序時程序不停止

啓動編程模式,它會給一些版畫,如:

waiting connections on port 1234 
local endpoint : 0.0.0.0:1234 
//I think it is using boost for TCP socket 

然後在啓動模式B.他們會發現對方和完美運行。

問題是如果我啓動模式A,然後使用「ctrl c」來終止模式A的應用程序。它將使端口在那裏打開。

當我啓動模式B時,它也會找到連接並由於A不存在而運行時發生錯誤。

我有一個bash來運行應用程序,我想問我如何強制該端口關閉? (在bash或其他可能的方式)

感謝

+0

如果使用'netstat的 - -n',做自己在輸出中查看所有列?在這些情況下,國家是否被偶然列爲「TIME_WAIT」? – Jeff

+0

Hi @Jeff它表明像:tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN – thundium

+0

你可以修改C ​​++代碼嗎?如果該程序在退出之前清理完畢,會更好。 – chepner

回答

1

使用此在bash腳本(調用您的二進制前):

trap "fuser -k -n tcp 1234 && exit" SIGINT SIGTERM 
+0

當且僅當OP沒有該程序的源代碼時,這將是在錯誤程序之後清理的合理嘗試。這不應該用在OP的二進制文件中正確處理SIGINT和SIGTERM。 – msw