有時候咱們須要控制套接字的行爲(如修改緩衝區的大小),這個時候咱們就要學習套接字選項。服務器
int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)
level指定控制套接字的層次.能夠取三種值:數據結構
返回值說明:函數
成功執行時,返回0。失敗返回-1,errno被設爲如下的某個值
EBADF:sock不是有效的文件描述詞
EFAULT:optval指向的內存並不是有效的進程空間
EINVAL:在調用setsockopt()時,optlen無效
ENOPROTOOPT:指定的協議層不能識別選項
ENOTSOCK:sock描述的不是套接字學習
數據結構說明:spa
1)結構:linger,它的聲明以下:
code
struct linger{ int l_onoff; //狀態 int l_linger; //等待時間 };2)結構:timeval,它的聲明以下:
struct timeval{ time_t tv_sec; //秒 suseconds_t tv_usec; //微秒:百萬分之一秒 };
SO_RCVBUF和SO_SNDBUF每一個套接口都有一個發送緩衝區和一個接收緩衝區,使用這兩個套接口選項能夠改變缺省緩衝區大小。
接口
// 接收緩衝區 int nRecvBuf=32*1024; //設置爲32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); //發送緩衝區 int nSendBuf=32*1024;//設置爲32K setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));