27. getsockopt和setsockopt函数


这里两个函数可以用来设置套接字选项或者说属性. 当然套接字选项的函数还有fcntlioctl, 但是现在暂时不会涉及到. 本机就来介绍者这两个函数.

函数原型

两个函数是根据套接字的类别对其进行设置的. 比如前面涉及到的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函数的行为.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值