一. 網絡屬性設置
在前幾節的編程中通過ctrl+C退出服務器端後,原本好用的代碼再次執行的時候,卻連接不上了,大約經過幾分鐘之後又能重新連接,後來添加了以下代碼後,問題就解決了。
int b_reuse =1;
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&b_reuse,sizeof(int));
那麼這兩句代碼是什麼意思呢??
其實這個函數就是改變了套接字fd的屬性。
那麼我們詳細看一下這個函數。
函數名 |
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); |
||||||||||
所需頭文件 |
#include <sys/types.h> |
||||||||||
功能 |
通過IP獲取主機的完整信息 |
||||||||||
傳入參數 |
|
||||||||||
返回值 |
成功執行時,返回0。失敗返回-1,errno被設爲以下的某個值 |
注:optname選項可設置如下值:
可以改這麼多屬性呢,可以詳細的進行學習一下,使用上都是一樣的。
/*允許綁定地址快速重用 */
int b_reuse = 1;
setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &b_reuse, sizeof (int));
/* 允許廣播 */
int b_br = 1;
setsockopt (fd, SOL_SOCKET, SO_BROADCAST, &b_br, sizeof (int));
/*設置接收超時*/
struct timeval tout;
tout.tv_sec = 5;
tout.tv_usec = 0;
setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, &tout, sizeof (struct timeval));