45.Linux編程---網絡屬性設置

一. 網絡屬性設置

在前幾節的編程中通過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>
#include <sys/socket.h>

功能

通過IP獲取主機的完整信息

傳入參數

sock

level

 optname

optval

optlen

將要被設置選項的套接字

選項所在的協議層。

1)SOL_SOCKET:通用套接字選項. (應用層)
2)IPPROTO_IP:IP選項. (網絡層)
3)IPPROTO_TCP:TCP選項.(傳輸層)

需要訪問的選項名

指向包含新選項值的緩衝

選項的長度

 

返回值

成功執行時,返回0。失敗返回-1,errno被設爲以下的某個值  
EBADF:sock不是有效的文件描述詞
EFAULT:optval指向的內存並非有效的進程空間
EINVAL:在調用setsockopt()時,optlen無效
ENOPROTOOPT:指定的協議層不能識別選項
ENOTSOCK:sock描述的不是套接字

 

注: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));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章