网络编程之 socket 选项

选项 可能存在于多层协议中,它们总会出现在最上面的 socket 层;当操作 socket 选项时,选项位于的层和选项的名称必须给出。

选项相关函数

setsockopt

  1. 头文件: #include<sys/socket.h>
  2. 功能: 设置与 socket 关联的选项。
  3. 原型:

    1
    int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);
  4. 参数:

    • sock: 将要被设置选项的 socket

      • level: 选项所在的协议层。

        | 值 | 含义 |
        | ——– | ——– |
        | SOL_SOCKET | 通用 socket 选项 |
        | IPPROTO_IP | IP 选项 |
        | IPPROTO_TCP | TCP 选项 |

      • optname: 需要设置的选项名。

      • optval: 指向包含新选项值的缓冲(根据选项名称的数据类型进行转换)。
      • optlen: 选项值的最大长度
  5. 返回值:

    • 0: 成功。

      • -1: 失败,错误原因可以通过 error 获得

        | 值 | 含义|
        | ——– | ——– |
        | EBADF | sock 不是有效的文件描述符 |
        | EFAULT | optval 指向的内存并非有效的进程空间 |
        | EINVAL | optlen 无效 |
        | ENOPROTOOPT | 指定的协议层不能识别选项 |
        | ENOTSOCK | sock 描述的不是 socket |

getsockopt

  1. 头文件: #include<sys/socket.h>
  2. 功能: 获取与 socket 关联的选项。
  3. 原型:

    1
    int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);
  4. 参数:

    • sock: 将要被获取选项的 socket
    • level: 选项所在的协议层。

      | 值 | 含义 |
      | ——– | ——– |
      | SOL_SOCKET | 通用 socket 选项 |
      | IPPROTO_IP | IP 选项 |
      | IPPROTO_TCP | TCP 选项 |

    • optname: 需要获取的选项名。

    • optval: 指向返回选项值的缓冲(根据选项名称的数据类型进行转换)。
    • optlen: 选项值的实际长度。
  5. 返回值:

    • 0: 成功。
    • -1: 失败,错误原因可以通过 error 获得

      | 值 | 含义|
      | ——– | ——– |
      | EBADF | sock 不是有效的文件描述符 |
      | EFAULT | optval 指向的内存并非有效的进程空间 |
      | ENOPROTOOPT | 指定的协议层不能识别选项 |
      | ENOTSOCK | sock 描述的不是 socket |

选项

























































































































协议层 选项名 说明 数据类型
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
------ 本文结束 ------
欣赏此文?求鼓励,求支持!