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的創建沒有關系,主要是由於沒有正確關閉的緣故,其實也算不上是沒有正常關閉,主要是由於使用了靜態變量,改回來就沒有問題了,我想大致原因是由於在服務中使用靜態變量。
摘自 cwj649956781