端口被占用BUG
sghall自從加了5997端口監聽后,每次kill掉該進程再馬上重啟總是提示端口被占用,當時5997端口連接的socket處于TIME_WAIT狀態,必須等超時后才會釋放該端口。
一般的做法都是
int iOpt;socklen_t iLen;iOpt = 1;iLen = sizeof(iOpt);//port reusesetsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, (void *)&iOpt, iLen);,當時不知道。一直以為必須設置一個選項讓他close后沒有TIME_WAIT狀態,也想過要加這個,因為代碼中有加。
?
后來才仔細看了代碼是這樣的
#ifdef LINUXint iOpt;socklen_t iLen;iOpt = 1;iLen = sizeof(iOpt);//port reusesetsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, (void *)&iOpt, iLen); #endif尼瑪,加了個ifdef,然后LINUX又是沒有定義的宏所以寫了也執行不到。
具體例子可以參照《UNIX環境高級編程》 464頁
轉載于:https://www.cnblogs.com/vanishfan/archive/2013/01/17/2865201.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: 【精品资源】干货分享:20款精美的手机网
- 下一篇: Enable-Migrations出错