c語言學習:Linux網絡編程套接字選項
8. 套接字選項
有時候我們要控制套接字的行為(如修改緩衝區的大小),這個時候我們就要控制套接字的 選項了.
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
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,...)
--------------------------------------------------------------------------
SIOCATMARK 是否到達帶外標記 int
FIOASYNC 異步輸入/輸出標誌 int
FIONREAD 緩衝區可讀的字節數 int
========================================================================== 詳細的選項請用 man ioctl_list 查看.
No comments:
Post a Comment