这里两个函数可以用来设置套接字选项或者说属性. 当然套接字选项的函数还有fcntl
和ioctl
, 但是现在暂时不会涉及到. 本机就来介绍者这两个函数.
函数原型
两个函数是根据套接字的类别对其进行设置的. 比如前面涉及到的Nagle
算法的关闭.
#include <sys/socket.h>
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);
成功 : 返回0
失败 : 返回-1.
函数参数
sockfd
: 套接字
除sockfd参数, 其他参数就用再网上找的图来说明, 这里也只罗列部分我们可能会用到的, 毕竟选项太多了.
level
: 第一列optname
: 第二列optval
: 对应数据类型的参数. getsockopt将获取的值保存在该参数, 而setsockopt是将设置新的值.optlen
: 参数optval
数据类型的大小.
函数调用
前面参数估计头都大了, 现在我们还是以关闭Nagle
算法为例来使用一下setsockopt函数吧.
int ret;
int num = 1;
ret = setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &num, sizeof(int));
if(ret < 0)
EXIT("setsockopt");
总结
以后可能我们会涉及到这些选项, 只需要清楚部分重要的就行了.
- 掌握两个函数的原型
- 尝试SO_REUSEADDR选项
- 了解一下SO_LINGER选项的功能. 本质是改变close函数的行为.