免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2351 | 回复: 6
打印 上一主题 下一主题

socket绑定老是出现错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-01 14:41 |只看该作者 |倒序浏览
具体代码如下

int sock_ser_fd = 0;
     //short port = 8888;
     short port = UDP_TCP_SOCKET_PORT;

     usleep(10000);//1 microsecond //should modifiy  if it not suittable
     printf("enter main task thread!\n");

     if((sock_ser_fd = socket(AF_INET,SOCK_STREAM,0)) < 0)
            perror("SOCK_STREAM error:");
     printf("sock_ser_fd= %d\n\n",sock_ser_fd);

     bzero(&tcp_server,sizeof(struct sockaddr_in));
     tcp_server.sin_family = AF_INET; //ipv4
     tcp_server.sin_addr.s_addr = htonl(INADDR_ANY);//net xulie
     tcp_server.sin_port = htons((port));

     /*bind a local address to the socket*/
     if(close(sock_ser_fd) < 0)
         perror("close tcp socketfd error!");
/////////
////////
/////////如下语句出现错误
     if(bind(sock_ser_fd,(struct sockaddr*)&tcp_server,sizeof(struct sockaddr)) < 0)
     {
         perror("bind error:");
         printf("errno=%d\n",errno);
         
     }
     /*specify sizeof request queue*/
     if(listen(sock_ser_fd,20) < 0)
     {
         perror("listen failed:");
     }
     else
     {
         printf("listen successful!\n");
     }

/////////////////////////////////////////////////
在绑定bind的时候出现“Bad file descriptor”的错误.如果系统重启就可以绑定。但停止程序后,有可能继续出现上面的绑定错误。

论坛徽章:
0
2 [报告]
发表于 2007-06-01 14:44 |只看该作者
在bind之前你又把socket給close了,為什麼?

论坛徽章:
0
3 [报告]
发表于 2007-06-01 14:51 |只看该作者
楼上说的对,我改错了。那句是我后来添加上去的。
现在我把它放到
if((sock_ser_fd = socket(AF_INET,SOCK_STREAM,0)) < 0)
            perror("SOCK_STREAM error:");
上面了。
继续测试下,看是否有问题。
谢谢

论坛徽章:
0
4 [报告]
发表于 2007-06-01 15:00 |只看该作者
现在出现如下错误,就在bind处
bind error:: Address already in use

能否认为释放端口?

论坛徽章:
0
5 [报告]
发表于 2007-06-01 15:14 |只看该作者
原帖由 cquptcqupt2 于 2007-6-1 15:00 发表
现在出现如下错误,就在bind处
bind error:: Address already in use

能否认为释放端口?


照著書本抄吧!

论坛徽章:
0
6 [报告]
发表于 2007-06-01 16:19 |只看该作者
原帖由 cquptcqupt2 于 2007-6-1 15:00 发表
现在出现如下错误,就在bind处
bind error:: Address already in use

能否认为释放端口?

极有可能是你上次运行的时候进程还没结束,或者其它进程在使用
端口     short port = UDP_TCP_SOCKET_PORT;

论坛徽章:
0
7 [报告]
发表于 2007-06-01 16:37 |只看该作者
哥们,把socket属性设置成SO_REUSEADDR,试试。我觉得是io复用的原因。

用这个函数setsockopt


具体的情况,你google一把
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP