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);