各位大大,,求救。。。关于accept()函数问题

发布于 2022-09-30 11:48:02 字数 2267 浏览 13 评论 0

本帖最后由 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
程序就退出。各位瞅瞅嘛。。咋回事呢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

晌融 2022-10-07 11:48:02

clsock = accept(sesock, (struct sockaddr *)&sin, &sinlen); // 把后两个参数 改为NULL

然后判断 clsock 是否等于 -1

www.crazyhadoop.com

叶落知秋 2022-10-07 11:48:02

有这句的呦

弄潮 2022-10-07 11:48:02
  1. man accept

复制代码

老街孤人 2022-10-07 11:48:02

谢谢crazyhadoop 热心帮助,以及改了
if( clsock = accept(sesock, NULL, NULL)== -1)
{
    printf("ji xu ");
    printf("%m", errno);
}

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

仙女 2022-10-07 11:48:02

同样的程序,在其他机器上运行时,就好着呢。。没有任何问题。,

眼泪淡了忧伤 2022-10-07 11:48:02

accep前面加上
sinlen=sizeof (struct sockaddr );

对风讲故事 2022-10-07 11:48:02

clsock = accept(sesock, (struct sockaddr *)&sin, sizeof(sin) ); //基本上就可以了。我测试可以

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文