有時候我們要控制套接字的行為(如修改緩沖區的大小),這個時候我們就要控制套接字的選項了. 8.1 getsockopt和setsockopt 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指定控制套接字的層次.可以取三種值: 1)SOL_SOCKET:通用套接字選項. 2)IPPROTO_IP:IP選項. 3)IPPROTO_TCP:TCP選項. optname指定控制的方式(選項的名稱),我們下面詳細解釋 optval獲得或者是設置套接字選項.根據選項名稱的數據類型進行轉換 選項名稱 說明 數據類型 ======================================================================== SOL_SOCKET ------------------------------------------------------------------------ SO_BROADCAST 允許發送廣播數據 int SO_DEBUG 允許調試 int SO_DONTROUTE 不查找路由 int SO_ERROR 獲得套接字錯誤 int SO_KEEPALIVE 保持連接 int SO_LINGER 延遲關閉連接 strUCt linger SO_OOBINLINE 帶外數據放入正常數據流 int SO_RCVBUF 接收緩沖區大小 int SO_SNDBUF 發送緩沖區大小 int SO_RCVLOWAT 接收緩沖區下限 int SO_SNDLOWAT 發送緩沖區下限 int SO_RCVTIMEO 接收超時 struct timeval SO_SNDTIMEO 發送超時 struct timeval SO_REUSERADDR 允許重用本地地址和端口 int SO_TYPE 獲得套接字類型 int SO_BSDCOMPAT 與BSD系統兼容 int ========================================================================== IPPROTO_IP -------------------------------------------------------------------------- IP_HDRINCL 在數據包中包含IP首部 int IP_OPTINOS IP首部選項 int IP_TOS 服務類型 IP_TTL 生存時間 int ========================================================================== IPPRO_TCP -------------------------------------------------------------------------- TCP_MAXSEG TCP最大數據段的大小 int TCP_NODELAY 不使用Nagle算法 int ========================================================================= 關於這些選項的詳細情況請查看 Linux Programmer's Manual 8.2 ioctl ioctl可以控制所有的文件描述符的情況,這裡介紹一下控制套接字的選項. int ioctl(int fd,int req,...) ========================================================================== ioctl的控制選項 -------------------------------------------------------------------------- SIOCATMARK 是否到達帶外標記 int FIOASYNC 異步輸入/輸出標志 int FIONREAD 緩沖區可讀的字節數 int ========================================================================== 詳細的選項請用 man ioctl_list 查看.
[1]