Linux網(wǎng)絡編程--8. 套接字選項
發(fā)布時間:2008-09-17 閱讀數(shù): 次 來源:網(wǎng)樂原科技
有時候我們要控制套接字的行為(如修改緩沖區(qū)的大小),這個時候我們就要控制套接字的選項了.
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獲得或者是設置套接字選項.根據(jù)選項名稱的數(shù)據(jù)類型進行轉換
選項名稱 說明 數(shù)據(jù)類型
========================================================================
SOL_SOCKET
------------------------------------------------------------------------
SO_BROADCAST 允許發(fā)送廣播數(shù)據(jù) int
SO_DEBUG 允許調試 int
SO_DONTROUTE 不查找路由 int
SO_ERROR 獲得套接字錯誤 int
SO_KEEPALIVE 保持連接 int
SO_LINGER 延遲關閉連接 struct linger
SO_OOBINLINE 帶外數(shù)據(jù)放入正常數(shù)據(jù)流 int
SO_RCVBUF 接收緩沖區(qū)大小 int
SO_SNDBUF 發(fā)送緩沖區(qū)大小 int
SO_RCVLOWAT 接收緩沖區(qū)下限 int
SO_SNDLOWAT 發(fā)送緩沖區(qū)下限 int
SO_RCVTIMEO 接收超時 struct timeval
SO_SNDTIMEO 發(fā)送超時 struct timeval
SO_REUSERADDR 允許重用本地地址和端口 int
SO_TYPE 獲得套接字類型 int
SO_BSDCOMPAT 與BSD系統(tǒng)兼容 int
==========================================================================
IPPROTO_IP
--------------------------------------------------------------------------
IP_HDRINCL 在數(shù)據(jù)包中包含IP首部 int
IP_OPTINOS IP首部選項 int
IP_TOS 服務類型
IP_TTL 生存時間 int
==========================================================================
IPPRO_TCP
--------------------------------------------------------------------------
TCP_MAXSEG TCP最大數(shù)據(jù)段的大小 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 緩沖區(qū)可讀的字節(jié)數(shù) int
==========================================================================