Linux(网络编程):06---SOCK可选项(getsockopt、setsockopt)

一、sock可选项 

协议层 选项名 读取 设置 作用
SOL_SOCKET SO_SENDBUF O O 设置输出缓冲的大小
SO_RCVBUF O O 设置输入缓冲去大小
SO_REUSEADDR O O 端口释放后立即重用
SO_KEEPALIVE O O 开启心跳检测
SO_BROADCAST O O 开启广播功能
SO_DONTROURT O O 发送给直连网络,和选用的协议有关
SO_OOBINLINE O O 直接发送单字节数据
SO_ERROR O X 调试和异常信息
SO_TYPR O X 套接字类型
协议层 选项名 读取 设置 作用
IPPROTO_IP IP_TOS O O 修改IP包的TOS字段.
IP_TTL O O 设置主机发送数据包的生存时间
IP_MULTICAST_TTL O O 设置多播组数据的TTL值
IP_MULTICAST_LOOP O O 设置多播是否回送
IP_MULTICAST_IF O O 设置默认接口
IP_ADD_MEMBERSHIP     在指定接口上加入组播组
IP_MULTICAST_TTL     设置多播组数据的TTL值
IP_DROP_MEMBERSHIP     退出组播组
IP_MULTICAST_IF     获取默认接口或设置接口
IP_MULTICAST_LOOP     禁止组播数据回送
协议层 选项名 读取 设置 作用
IPPROTO_IP TCP_KEEPALIVE O O 设置主动探测socket是否可用的方式
TCP_NODELAY O O 设置Nagle算法
TCP_MAXSEG O O 设置发送给对端的最大数据量

二、setsockopt

int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
  • 我们通过socket()函数创建一个socket文件描述符直接使用,其实这只是系统为我们提供的一个默认的socket描述符,我们可以根据自己的工程的需求来对socket进行相应的配置,以提高程序的效率 
  • 参数1:sock描述符
  • 参数2:协议层(要设置的可选项的协议层)
  • 参数3:相对于参数2的可选项名字
  • 参数4:要设置的可选项值的缓冲地址
  • 参数5:保存要设置的可选项值的字节数

返回值

  • 成功后,返回0。出错时返回-1,并正确设置errno
  • 例如:我们设置一个sock用来当做广播通信,就可以使用以下方法

int    yes = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &yes, sizeof(yes));

二、getsockopt

int getsockopt(int sockfd, int level, int optname,void *optval, socklen_t *optlen);
  • 参数1:sock描述符
  • 参数2:协议层(要查看的可选项的协议层)
  • 参数3:相对于参数2的可选项名字
  • 参数4:要设置的可选项值的缓冲地址
  • 参数5:保存返回的可选项值的字节数

返回值

  • 成功后,返回0。出错时返回-1,并正确设置errno

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/88836062