Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831551
  • 博文数量: 143
  • 博客积分: 455
  • 博客等级: 一等列兵
  • 技术积分: 861
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-03 00:11
文章分类

全部博文(143)

文章存档

2018年(10)

2017年(6)

2016年(28)

2015年(14)

2014年(67)

2013年(1)

2012年(17)

我的朋友

分类: LINUX

2016-04-27 22:15:12

Linux所提供的socket库中存在一个bug,即不能为一个套接字重新启用同一个端口,即使是你正常关闭该套接字以后,这是因为linux内核在一个绑定套接字的进程结束后从不把端口标记为未用。为了解决上述问题,setsockopt和getsockopt函数就被引进来了,当然它俩的功能不止这一点。

函数原型:

点击(此处)折叠或打开

  1. int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)
  2. int getsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)
其中
    level是函数所使用的协议标准,可以取如下值:

点击(此处)折叠或打开

  1. SOL_SOCKET: 基本套接口
  2. IPPROTO_IP: IPv4套接口
  3. IPPROTO_IPV6: IPv6套接口
  4. IPPROTO_TCP: TCP套接口
    optval是指向setsockopt函数所设置的值的地址,getsockopt函数所获取的值
    optlen是optval的长度,以bytes计
    optname是选项的名称,可以取如下值:

点击(此处)折叠或打开

  1. SO_BROADCAST BOOL类型 允许套接口传送广播信息
  2. SO_DEBUG BOOL类型 记录调试信息
  3. SO_DONTLINER BOOL类型 不要因为数据未发送就阻塞关闭操作
  4. SO_DONTROUTE BOOL类型 禁止选择径;直接传送
  5. SO_KEEPALIVE BOOL类型 发送保持活动包
  6. SO_LINGER struct linger FAR* 如关闭时有未发送数据,则逗留
  7. SO_OOBINLINE BOOL类型 在常规数据流中接收带外(Out-Of-Band)数据
  8. SO_RCVBUF int类型 为接收确定缓冲区大小
  9. SO_REUSEADDR BOOL类型 允许套接口和一个已在使用中的地址捆绑
  10. SO_SNDBUF int类型 指定发送缓冲区大小
端口可重用的代码片断

点击(此处)折叠或打开

  1. s = socket(...)
  2. BOOL isReusable=TRUE;
  3. setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&isReusable,sizeof(BOOL));

阅读(1460) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~