8.1 getsockopt和setsockopt[code lang="c" light="true"] 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) [/code] 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 服务类型 int IP_TTL 生存时间 int ==================================================== IPPRO_TCP ---------------------------------------------------- TCP_MAXSEG TCP最大数据段的大小 int TCP_NODELAY 不使用Nagle算法 int ==================================================== 关于这些选项的详细情况请查看 Linux Programmer's Manual。8.2 ioctlioctl 可以控制所有的文件描述符的情况，这里介绍一下控制套接字的选项。[code lang="c" light="true"]int ioctl(int fd, int req,...)[/code] ==================================================== ioctl的控制选项 ---------------------------------------------------- SIOCATMARK 是否到达带外标记 int FIOASYNC 异步输入/输出标志 int FIONREAD 缓冲区可读的字节数 int ==================================================== 详细的选项请用 man ioctl_list 查看。