getsockopt套接口选项

1. getsockopt

int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

sockfd:一个标识套接口的描述字
level:选项定义的层次。例如,支持的层次有SOL_SOCKET、IPPROTO_TCP
optname:需获取的套接口选项
optval:指针,指向存放所获得选项值的缓冲区
optlen:指针,指向optval缓冲区的长度值

2. struct sock
Linux内部为每个socket所维护的一个struct sock这样一个对象

struct sock
{
    /* 其他字段 */
    int sk_rcvbuf;            /* 接受缓冲区大小 */
    atomic_t sk_rmem_alloc;   /* 已经申请的read memory */
    atomic_t sk_wmem_alloc;   /* 已经申请的write memory */
    int sk_sndbuf;            /* 发送缓冲区大小 */
    /* 其他字段 */
};

3. 实例

int snd_buf_size = 0;
socklen_t opt_size = sizeof(snd_buf_size);
getsockopt(sock_fd, SOL_SOCKET, SO_SNDBUF, &snd_buf_size, &opt_size);
printf("socket %d's sndbuf is %d bytes
", sock_fd, snd_buf_size);
原文地址:https://www.cnblogs.com/zhangxuechao/p/11709886.html