免费注册 查看新帖 |

Chinaunix

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

各位大大,,求救。。。关于accept()函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-11 16:24 |只看该作者 |倒序浏览
本帖最后由 dangjianghao 于 2011-04-11 16:51 编辑

问题:
  最近遇到一个比较纠结的问题,纠缠了我好几天了,被逼无奈,向各位老大求救。
  运行系统:SuSE Linux Enterprise Desktop 10
  服务端监听80端口 代码如下:

  1.        printf("%d\n",sesock);
  2.        printf("%s\n","Accept");
  3.        printf("%d\n",&sin);
  4.        clsock = accept(sesock, (struct sockaddr *)&sin, &sinlen);
  5.        printf("%d\n",clsock);
  6.        if(clsock == INVALID_SOCKET)
  7.        {
  8.            printf("Error: client socket() error.\n");
  9.            return;
  10.        }

复制代码
就上面这段代码,程序启动后,输出结果如下:
  4
  Accept
  1853507440
  Terminated
   接下来程序就直接给退出了,,accept函数执行失败??还是别的原因??也不输出错误,就给退出了。。实在找不到问题的所在,各位帮帮忙,或者什么原因会导致这种情况?是否是我系统的问题呢?
  开始机器需要安装网卡驱动,但是安装网卡驱动必须要Kernel,我就给装了,。

现在我把代码修改了下,结果成下面这种 情况了:

  1. /* Accept the new client connection */
  2.   printf("%d\n",sesock);
  3.   printf("%s\n","wei  zhi xing Accept han shu zhi qian");
  4.   printf("Connection from%s:%d\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port));
  5.   clsock = accept(sesock, (struct sockaddr *)&sin, &sinlen);
  6.   printf("%s\n","you xin de ke hu duan lian jie");

  7.   if(clsock == INVALID_SOCKET) {
  8.     printf("Error: client socket() error.\n");

  9.     return;
  10.   }
复制代码
输出结果:
4
wei  zhi xing Accept han shu zhi qian
Connection from0.0.0.0:0
Terminated
程序就退出。各位瞅瞅嘛。。咋回事呢

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
2 [报告]
发表于 2011-04-11 18:17 |只看该作者
clsock = accept(sesock, (struct sockaddr *)&sin, &sinlen); // 把后两个参数 改为NULL

然后判断 clsock 是否等于 -1


www.crazyhadoop.com

论坛徽章:
0
3 [报告]
发表于 2011-04-11 18:26 |只看该作者
谢谢crazyhadoop 热心帮助,以及改了
if( clsock = accept(sesock, NULL, NULL)== -1)
{
    printf("ji xu ");
    printf("%m", errno);
}

可是运行结果还是程序退出。

论坛徽章:
0
4 [报告]
发表于 2011-04-11 18:44 |只看该作者
同样的程序,在其他机器上运行时,就好着呢。。没有任何问题。,

论坛徽章:
0
5 [报告]
发表于 2011-04-11 21:17 |只看该作者
accep前面加上
sinlen=sizeof (struct sockaddr );

论坛徽章:
0
6 [报告]
发表于 2011-04-11 21:48 |只看该作者
有这句的呦

论坛徽章:
0
7 [报告]
发表于 2011-04-12 16:33 |只看该作者

  1. man accept
复制代码

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
8 [报告]
发表于 2011-04-14 22:56 |只看该作者
clsock = accept(sesock, (struct sockaddr *)&sin, sizeof(sin) ); //基本上就可以了。我测试可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP