MemoryGarden's Blog

努力 -----------大能猫

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 11 Stories :: 20 Comments :: 0 Trackbacks
int getsockopt (int sockfd, int level, int name, char* value, int* optlen);
int setsockopt (int sockfd, int level, int name, char* value, int* optlen);

参数:
   sockfd : 必须是一个已经打开的套接字
   level : 是函数所使用的协议标准(protocol level) (TCP/IP 协议使用 IPPROTO_TCP, 套接字标准的选项使用 SOL_SOCKET)。
   name :
   value : 指向为 getsockopt()函数所获取的值。 setsockopt 所设置的值的地址。
  
linux 系统所提供的socket库有一个bug,次错误表现为你不能为一个套接字重新启用一个端口号,即使在你正常关闭一个套接字以后。例如,你编写一个服务器在套接字上等待的一个程序,服务器打开套接字,并在其上侦听,是没有问题的,无论如何,总有一些原因,使你的程序需要重新启动,然后重新启动后,就不能把它绑定在原来的那个端口上了,从bind 系统调用返回代码总是说你试图连接的端口已经被别的进程所绑定。问题在于linux内核在一个绑定套接字的进程结束后,从不把端口标记为未用,解决这个问题的办法是,当套接字打开,但尚未有连接的时候,用setsockopt系统调用,设定如下选项

当打开一个socket套接字的时候,必须同时用下面的代码段来调用setsockopt 函数

   int opt = 1;
   int len = sizeof(opt)
   setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, &len)

SO_REUSEADDR 选项将套接口设置成重新使用旧的地址(ip和port),而不等待



posted on 2011-06-22 23:03 memorygarden 阅读(609) 评论(0)  编辑 收藏 引用 所属分类: 网络编程

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理