免费注册 查看新帖 |

Chinaunix

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

各位牛牛,accept()直接返回,这是为什么阿? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-02 11:45 |只看该作者 |倒序浏览
在守护进程里写了一个socket通信,bind,listen都成功了,但是accept不等客户机联接就直接返回了,把这段程序复制放在非守护进程里就能阻塞在那儿,这是为什么呢?是不是守护进程的原因?
还望指点阿
先谢了!

论坛徽章:
0
2 [报告]
发表于 2007-04-02 12:53 |只看该作者
直接返回什么了。是-1还是其他值?

论坛徽章:
0
3 [报告]
发表于 2007-04-02 13:52 |只看该作者
回二楼,返回-1。。。。。。。

论坛徽章:
0
4 [报告]
发表于 2007-04-02 14:28 |只看该作者
那你在返回-1时做一下判断,要是得到的是-1,那么就用strerror(errno);语句把错误信息打印出来,看看打出的什么错误。。。

论坛徽章:
0
5 [报告]
发表于 2007-04-02 14:46 |只看该作者
打了出错信息的,error为4,但不明白什么意思

论坛徽章:
0
6 [报告]
发表于 2007-04-02 14:57 |只看该作者
不是把errno打印出来,你用strerror(errno);打出它的错误信息。。。

论坛徽章:
0
7 [报告]
发表于 2007-04-02 14:59 |只看该作者

回复 #5 baoxiongxiong 的帖子

打出来了,显示Interrupted system call,是什么意思啊

论坛徽章:
0
8 [报告]
发表于 2007-04-02 15:06 |只看该作者
就是你的accept系统调用被中断了。。。

也就是说从accept阻塞中被中断出来了。。。

我知道在守护进程中 能用udp,能不能用tcp就不太清楚了,我想你还是用udp吧。。。

你能不能把你的程序贴出来看看阿。要不也不好判断是什么原因导致的错误。因为原因有很多种

论坛徽章:
0
9 [报告]
发表于 2007-04-02 15:15 |只看该作者

回复 #8 zengg82 的帖子

my_addr.sin_family = AF_INET;

    my_addr.sin_port = htons(nPortNumberOut);
    my_addr.sin_addr.s_addr = inet_addr("127.0.0.1";

    bzero(&(my_addr.sin_zero), ;


    //创建套接字

    if((listensocket = socket(AF_INET, SOCK_STREAM, 0)) == -1)

    {

        PrintError("创建套接字失败,结束通信!";
        return 0;

    }
    else
    {
        PrintError("创建套接字成功!";
    }
   

    //绑定套接字

    if(bind(listensocket, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)

    {

        PrintError("绑定失败,结束通信!";
        return 0;

    }
    else
    {
        PrintError("绑定套接字成功!";
    }

   

    //监听

    if(listen(listensocket, 100) == -1)

    {

        PrintError("监听失败,结束通信!";
        return 0;

    }

    else
    {
        PrintError("监听成功!";
    }


    for(i = 0; i < nClientNumber; i++)

    {

        sin_size = sizeof(struct sockaddr_in);

        //socket进程监听连接请求
        PrintError("等待连接!";

        if((newsocket = accept(listensocket, (struct sockaddr *)&their_addr, &sin_size)) == -1)

        {
              char szError[8];
              sprintf(szError,"%d",errno);
              PrintError(szError);
              char *a = strerror(errno);
                PrintError(a);

            PrintError("本次连接失败,继续其他连接!";

        }

        else

        {

            //数据处理

        }

    }

论坛徽章:
0
10 [报告]
发表于 2007-04-02 15:17 |只看该作者
PrintError是自己定义的一个输出函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP