Linux網(wǎng)絡(luò)編程--8. 套接字選項(xiàng)
http://linuxc.51.net 作者:hoyt
有時(shí)候我們要控制套接字的行為(如修改緩沖區(qū)的大小),這個(gè)時(shí)候我們就要控制套接字的選項(xiàng)了.
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:通用套接字選項(xiàng). 2)IPPROTO_IP:IP選項(xiàng). 3)IPPROTO_TCP:TCP選項(xiàng).
optname指定控制的方式(選項(xiàng)的名稱),我們下面詳細(xì)解釋
optval獲得或者是設(shè)置套接字選項(xiàng).根據(jù)選項(xiàng)名稱的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換
選項(xiàng)名稱 說明 數(shù)據(jù)類型
========================================================================
SOL_SOCKET
------------------------------------------------------------------------
SO_BROADCAST 允許發(fā)送廣播數(shù)據(jù) int
SO_DEBUG 允許調(diào)試 int
SO_DONTROUTE 不查找路由 int
SO_ERROR 獲得套接字錯(cuò)誤 int
SO_KEEPALIVE 保持連接 int
SO_LINGER 延遲關(guān)閉連接 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 接收超時(shí) struct timeval
SO_SNDTIMEO 發(fā)送超時(shí) 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首部選項(xiàng) int
IP_TOS 服務(wù)類型
IP_TTL 生存時(shí)間 int
==========================================================================
IPPRO_TCP
--------------------------------------------------------------------------
TCP_MAXSEG TCP最大數(shù)據(jù)段的大小 int
TCP_NODELAY 不使用Nagle算法 int
=========================================================================
關(guān)于這些選項(xiàng)的詳細(xì)情況請(qǐng)查看 Linux Programmer's Manual
8.2 ioctl
ioctl可以控制所有的文件描述符的情況,這里介紹一下控制套接字的選項(xiàng).
int ioctl(int fd,int req,...)
==========================================================================
ioctl的控制選項(xiàng)
--------------------------------------------------------------------------
SIOCATMARK 是否到達(dá)帶外標(biāo)記 int
FIOASYNC 異步輸入/輸出標(biāo)志 int
FIONREAD 緩沖區(qū)可讀的字節(jié)數(shù) int
==========================================================================
詳細(xì)的選項(xiàng)請(qǐng)用 man ioctl_list 查看.