1. 程式人生 > >socket端新增地址複用

socket端新增地址複用

傳智掃地僧課程學習筆記。

實驗1,

執行之前的伺服器程式後,

再執行一個,

會提示: Address already in use,意即埠被佔用,這個沒什麼好說的,

實驗2,

執行伺服器程式,執行客戶端程式,

然後結束伺服器程式,

注意了啊,這時候你再開啟伺服器程式,會提示和上面一樣的錯誤,

這時候你用 netstat  -na | grep 8001,

這時候,仍然有資訊回來,

如下,


結論就是,處於類似的狀態你,你再次啟動伺服器程式,無法啟動,

所以有這樣一個技術,

setsockopt,在bind之前呼叫,

之後你再啟動伺服器程式,就不會提示錯誤了,

不過這時候估計是因為之前的連線已經斷了,所以你繼續從客戶端發信息,會沒有迴應,

這時候你重新啟動客戶端,就又像之前一樣正常收發資料了,

int optval = 1;
	if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval))
			< 0)
	{
		perror("setsockopt bind\n");
		exit(0);
	}
	
	if( bind( sockfd, (struct sockaddr *)&srvaddr, sizeof( srvaddr)) <0)
	{
		perror("socket\n");
		exit( 0);
	}