套接字选项——getsockopt和setsockopt

  这两个函数仅用于套接字

#include <sys/socket.h>   
int getsockopt(int sock, int level, int optname, void *optval, socklen_t *optlen);  
int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen); 
//if success return 0,else return -1 

参数:

  1. sock:指向一个的打开的套接字描述符,也就是将要被设置或者获取选项的套接字。
  2. level:所在协议,或为通用套接字,或为某个特定协议(例如IPv4,IPv6、TCP或SCTP)

      <1>SOL_SOCKET: 基本套接口 

      <2>IPPROTO_IP: IPv4套接口 

      <3>IPPROTO_IPV6: IPv6套接口 

      <4>IPPROTO_TCP: TCP套接口 

  1. optname:需要访问的选项名。
  2. optval:对于getsockopt(),把已经获取的选项值存放在*optval中,为0表示相应的选项被禁止,不为零表示该选项被启用。对于setsockopt(),从*optval中取得选项待设置的新值,为0禁止该选项...
  3. optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度。

返回值:

  成功执行时,返回0;失败返回-1,errno被设为以下的某个值 :

  1. EBADF:sock不是有效的文件描述词
  2. EFAULT:optval指向的内存并非有效的进程空间
  3. EINVAL:在调用setsockopt()时,optlen无效
  4. ENOPROTOOPT:指定的协议层不能识别选项
  5. ENOTSOCK:sock描述的不是套接字

原文地址:https://www.cnblogs.com/tianzeng/p/10467757.html