美文网首页初见
高级C与网络编程复习(7)—— 套接字选项(Socket Opt

高级C与网络编程复习(7)—— 套接字选项(Socket Opt

作者: SunnyQjm | 来源:发表于2020-05-17 20:26 被阅读0次

    获取和设置影响套接字的三种方式

    • getsockopt 和 setsockopt 函数和
    • fcntl 函数 (file control)
    • ioctl (IO control)

    getsockopt 和 setsockopt 函数

    这两个函数仅用于套接字

    #include <sys/socket.h>
    
    /**
    * 获取一个打开的套接字的选项
    *
    * @param sockfd      必须指向一个打开的套接字描述符
    * @param level       级别
    * @param optname     选项名
    * @param optval      指向一个变量的指针,用于接收函数的结果,其长度由最后一个长度限定
    * @param optlen      这是一个Value-Result参数,传入时限定optval的最大长度,防止缓存溢出
    *                    函数执行结束时,可以通过这个参数知道内核究竟往optval写了多少数据
    * @return 成返回0,出错返回-1
    */
    int getsockopt(int sockfd, int level, itn optname, void *optval,
                   socklen_t *optlen);
    
    /**
    * 设置一个打开的套接字的选项
    *
    * @param sockfd      必须指向一个打开的套接字描述符
    * @param level       级别
    * @param optname     选项名
    * @param optval      指向一个变量的指针,用于向函数传递要设置的值,其长度由最后一个长度限定
    * @param optlen      指示了optval的长度
    * @return 成返回0,出错返回-1
    */
    int setsockopt(int sockfd, int level, int optname, const void *optval,
                   socklen_t optlen);
    
    • 套接字选项汇总 ==> 课本图 7-1 和 7-2

      • 标志 ==> 表示这个选项是一个二元选项。0 表示关闭,非 0 表示开启

    IPv4 套接字选项

    下面几个选项的等级(level)均为 IPROTO_IP

    • IP_HDRINCL

      • 可以为一个原始套接字设置该选项,设置以后可以自己构造 IP 首部(即在往里面写数据的时候是从 IP 包的首部起始位置开始写)
    • IP_OPTIONS

      • 该选项允许我们在 IPv4 中设置 IP 选项
    • IP_RECVDSTADDR

      • 该套接字选项导致所收到的 UDP 数据报的目的 IP 地址由 recvmsg 函数作为辅助数据返回
    • IP_RECVIF

      • 该套接字选项导致所收到的 UDP 数据包的接收接口索引有 recvmsg 函数作为辅助数据返回
    • IP_TOS

      • 该套接字选项允许我们为 TCP、UDP 或 SCTP 套接字设置 IP 首部中的服务类型字段
    • IP_TTL

      • 我们可以使用本选项设置或获取系统改用在从某个给定套接字发送的单薄分组上的默认 TTL 值

    相关文章

      网友评论

        本文标题:高级C与网络编程复习(7)—— 套接字选项(Socket Opt

        本文链接:https://www.haomeiwen.com/subject/kmoswhtx.html