博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

getsockopt函数的使用

Posted on 2011-04-20 14:27  天地玄黄  阅读(18866)  评论(1编辑  收藏  举报

函数原型为:

#include <netinet/socket.h>

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

                                                                                                          Return: 0 if OK, –1 on error

这个函数用于获得socket的各种特性,即socket options. 结果放在函数的后两个参数中,这两个参数是value-result。

sockfd 是所要查看的socket的file descriptor

level 和 optname 在Figure 7.1 中(Unix Network Programming, P.193)

optval,getsockopt() 函数把所得到的socket option的值放到这个参数之中。它的数据类型要和Figure 7.1中的Datatype一致。

optlen 作为参数是表示optval 的大小。作为结果是表示返回的 optval 的大小。

 

#include "unp.h"
#include <netinet/tcp.h>

int main(int argc, char **argv)
{
	int fd, val;
	socklen_t len;
	char strres[128];
	
	len = sizeof(val);
	fd = Socket(AF_INET, SOCK_STREAM, 0);
	if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &val, &len) == -1)
	{
		err_ret("getsockopt error");
	}
	else 
	{
		if(len != sizeof(int))
			snprintf(strres, sizeof(strres), "sizeof (%d) not sizeof(int)", len);
		else
			snprintf(strres, sizeof(strres), "%d", val);
		printf("default = %s\n", strres);
	}
	close(fd);
	exit(0);
}

这里是查看receive buffer的大小。