setsockopt / getsockopt

设置套接字的参数

头文件

函数原型

int setsockopt(int sockfd, int level, int option, const void *val, socklen_t len)

int getsockopt(int sockfd, int level, int option, void *val, socklen_t *lenp)

函数说明

  • level 标志选项应用的协议
    • SOL_SOCKET 通用的套接字层次选项
    • IPPROTO_TCP tcp选项
    • IPPROTO_IP ip选项
  • option 选项说明
    • SOL_SOCKET 通用选项
      • SO_ACCEPTCONN int 返回信息指示该套接字是否能被监听
      • SO_BROADCAST int 如果非0,表示允许广播数据报, 只适合于数据报
      • SO_DEBUG int 非0表示启用网络驱动调试功能
      • SO_DONTROUTE int 非0表示绕过底层协议的正常路由机制
      • SO_ERROR int 返回挂起的套接字错误并清除
      • SO_KEEPALIVE int 非0表示启用周期性keep-alive报文, 周期性测试连接是否仍存活, 如果2小时内在该套接字的任意方向上都没有数据交换,tcp就自动给对端发送一个保持存活探测分节。
      • SO_LINGER struct linger 当还有未发送报文而套接字已关闭时,延迟时间

        struct linger {
        int l_onoff; // 0=off
        int l_linger; // linger time
        }

      • SO_RCVBUF int 接收缓冲区的字节长度
      • SO_RCVLOWAT int 接收调用中返回的最小数据字节数, 由select函数调用,表示让select返回可读时套接字接收缓冲区中所需的数据量。对于tcp\udp\sctp套接字来说,默认值为1。
      • SO_RCVTIMEO struct timeval 套接字接收调用的超时时间
      • SO_SNDBUF int 发送缓冲区大小
      • SO_SNDLOWAT int 发送调用中传送的最小数据字节数, 让select返回可写时套接字发送缓冲区中所需的可用空间。对于TCP套接字来说,默认值通常为2048。
      • SO_SNDTIMEO struct timeval 套接字发送调用的超时值
      • SO_REUSEADDR int 非0表示重用本地地址和端口
      • SO_REUSEPORT int 允许重用本地端口
      • SO_TYPE int 返回套接字的类型
      • SO_BINDTODEVICE struct ifreq nif; 将套接字绑定到指定接口,例如eth0等, 如果绑定了接口,这个套接字只能处理由该接口收到的数据。AF_INET套接字支持,但是packet 套接字不支持(不过,可以使用bind函数绑定地址)。
    • IPPROTO_TCP
      • TCP_MAXSEG int tcp最大数据段大小
      • TCP_NODELAY int 是否使用Nagle算法
    • IPPROTO_IP
      • IP_HDRINCL int 在数据包中包含IP首部
      • IP_OPTINOS int IP首部选项
      • IP_TOS 服务类型
      • IP_TTL int 生存时间

返回值

成功返回0 失败返回-1

文档更新时间: 2021-02-04 16:38   作者:周国强