socket為什麼無法繫結?

2021-06-06 13:08:02 字數 734 閱讀 3485

q:我繫結socket的時候總是失敗,只有開機第一次執行程式的時候可以繫結,然後以後就不行了,當我使用另外乙個程式連線此埠的時候卻連不上,但是我用埠掃瞄軟體卻可以掃到這個埠,請問大俠是什麼原因?如何解決?謝謝了先。

a:1.先確定該socket正常關閉   

2.如果乙個socket繫結了某個埠,該socket正常關閉或程式退出後,在一段時間內該埠依然保持被繫結的狀態,其他程式(或者重新啟動的原程式)無法繫結該埠。可以在獲得socket描述符之後通過呼叫setsockopt語句避免該問題:   

int   sockfd;   

int   opt   =   1;   

int   len   =   sizeof(opt);   

sockfd   =   socket(af_inet,   sock_stream,   0);   

setsockopt(sockfd,   sol_socket,   so_reuseaddr,   &opt,   &len);

q:原因查出來了,與socket的建立沒有關係,主要是由於沒有正確關閉的緣故,其實也算不上是沒有正常關閉,主要是由於使用了靜態變數,改回來就沒有問題了,我想大致原因是由於在服務中使用靜態變數。

還有乙個原因:

那就是,該程式繫結了該埠之後,程式就退出了。但是該埠給該程式的子程式給繼承下來繫結了,所以導致下一次該程式繼續繫結的時候失敗。解決辦法:在該程式結束的時候,同時結束掉他的子程式,這樣就可以避免該埠的繫結。

socket為什麼無法繫結?

q 我繫結socket的時候總是失敗,只有開機第一次執行程式的時候可以繫結,然後以後就不行了,當我使用另外乙個程式連線此埠的時候卻連不上,但是我用埠掃瞄軟體卻可以掃到這個埠,請問大俠是什麼原因?如何解決?謝謝了先。a 1.先確定該socket正常關閉 2.如果乙個socket繫結了某個埠,該sock...

什麼是Socket,為什麼要用Socket

應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個tcp協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與tcp ip協議互動提供了稱為套接字 socket 的介面,區分不同應...

什麼是Socket,為什麼要用Socket

應用層通過傳輸層進行資料通訊時,tcp和udp會遇到同時為多個應用程式程序提供併發服務的問題。多個tcp連線或多個應用程式程序可能需要通過同乙個 tcp協議埠傳輸資料。為了區別不同的應用程式程序和連線,許多計算機作業系統為應用程式與tcp ip協議互動提供了稱為套接字 socket 的介面,區分不同...