当前位置:  技术问答>linux和unix

重复绑定

    来源: 互联网  发布时间:2016-02-03

    本文导语:  在server.c程序中 struct sockaddr_in adr_client; tcpsocket = socket(AF_INET,SOCK_STREAM,0); ret=setsockopt(tcpsocket,SOL_SOCKET,SO_REUSEADDR,(void *) &opt,(socklen_t) &len3); memset( &adr_client, 0, sizeof(adr_client) ); adr_client.sin_family = AF_INET; adr_client...

在server.c程序中
struct sockaddr_in adr_client;
tcpsocket = socket(AF_INET,SOCK_STREAM,0);
ret=setsockopt(tcpsocket,SOL_SOCKET,SO_REUSEADDR,(void *) &opt,(socklen_t) &len3);
memset( &adr_client, 0, sizeof(adr_client) );
adr_client.sin_family = AF_INET;
adr_client.sin_addr.s_addr = htonl(INADDR_ANY); 
adr_client.sin_port = htons(8000); 
addrlength = sizeof(adr_client);
        ret=bind(tcpsocket,(struct sockaddr *) &adr_client,addrlength);
if( ret== -1 )
{     printf("bind error!n");
                    close(tcpsocket);
  return 0;
}  
 
为什么我用了上面的以后还是不能重复绑定,我退出服务器端后马上运行./server
时还是会报错""bind error"",已经允许重复绑定了了,为什么还是不能马上再次绑定呢?
我就是要解决在退出后马上又能绑定该服务器端口.(在过了一段时间运行是不会报这个错误的,这是由于TCP的TIME_WAIT决定的).

|
没有检查setsockopt的返回值,估计调用失败了,
ret=setsockopt(tcpsocket,SOL_SOCKET,SO_REUSEADDR,(void *) &opt,(socklen_t) &len3);
===
opt的值需要设置为1,len3需要设置为sizeof(opt), 用法不对, 应该去掉地址符号,函数原型为:
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

这是一个简单的例子:
===
#include 
#include 
#include 
#include 

#include 
#include 

#define BUF_SIZE        80

typedef struct sockaddr SA;

int main(void)
{
        int ret;
        int listen_fd, client_fd;
        int optval;
        socklen_t optlen;
        struct sockaddr_in listen_addr, client_addr;
        socklen_t addrlen;
        char buf[BUF_SIZE + 1];

        if ((listen_fd = socket(PF_INET, SOCK_STREAM, 0)) 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Lists(链表) 成员 unique():删除list中重复的元素
  • SQL语句去掉重复记录,获取重复记录
  • 删除数据库中重复记录方法介绍及代码参考
  • sqlserver清除完全重复的数据只保留重复数据中的第一条
  • java去除集合中重复元素示例分享 java去除重复
  • REPLICATE 以指定的次数重复字符表达式
  • 基于Manifest.xml中不要出现重复的uses permission的说明
  • datatable去掉重复行的方法
  • C#短时间内产生大量不重复的随机数
  • SQL 重复记录问题的处理方法小结
  • Oracle 如何快速查找和删除重复记录
  • SQL语句实现删除ACCESS重复记录的两种方法
  • 删除重复记录
  • vector序列中是否允许有重复的元素?
  • 枚举类型定义重复疑问?
  • 重复数据删除 Duke
  • 重复文件检查工具 FindDup
  • sco unix下如何快速重复以前输入过的命令?
  • 几种防止表单重复提交的方法
  • jquery如何判断表格同一列不同行input数据是否重复
  • 生成不重复随机数列表的c#代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3