int on=1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(on));
這樣的設定是可以讓不同的應用程式在
其使用方式,
只需要在建立一個Socket之後,
使用setsockopt function就可以達到,
短時間內連續bind同一個port的功能了!
另外一提的是,如果udp, 與tcp使用相同的port,是不需要使用這一個功能的,因為tcp, udp的協定本來就不同,所以不會產生衝突哩
1、當有一個有相同本地地址和port的socket1處於TIME_WAIT狀態時,而你啟動的程序的socket2要佔用該地址和端口,你的程序就要用到該選項。
2、SO_REUSEADDR允許同一port上啟動同一服務器的多個實例(多個進程)。但每個實例綁定的IP地址是不能相同的。在有多塊網卡或用IP Alias技術的機器可以測試這種情況。
3、SO_REUSEADDR允許單個進程綁定相同的端口到多個socket上,但每個socket綁定的ip地址不同。這和2很相似,區別請看UNPv1。
4、SO_REUSEADDR允許完全相同的地址和端口的重複綁定。但這只用於UDP的多播,不用於TCP(應該也包含SCTP)。
參考資料:
解決Socket連續Bind同一個Port的問題
socket編程:SO_REUSEADDR例解
沒有留言:
張貼留言