免费注册 查看新帖 |

Chinaunix

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

关于网络的程序 请给点建议 各位大虾!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-16 16:48 |只看该作者 |倒序浏览
//sin_size = sizeof(struct sockaddr_in);
        //printf("server:got connection from %s\n",inet_ntoa(their_addr.sin_addr));
        fd_set   rdfdset, exfdset;
        while(1)
        {
                FD_ZERO(&rdfdset);
                FD_SET(sock_fd, &rdfdset);
                FD_SET(new_fd, &rdfdset);
                FD_ZERO(&exfdset);
                FD_SET(new_fd, &exfdset);
                if(select(FD_SETSIZE, &rdfdset, NULL, &exfdset, NULL) < 0)
                {
                        printf("select Error: %s\n", strerror(errno));
                        exit(1);
                }
                if(FD_ISSET(sock_fd, &rdfdset))//FD_ISSET(usersock_fd, &rdfdset)
                {
                        if((new_fd = accept(sock_fd,(struct sockaddr *)&their_addr,&sin_size)) == -1)
                        {
                                perror("accept error\n");
                                exit(1);
                        }
                }
                if(FD_ISSET(new_fd, &rdfdset))
                {
                        char buf[100];       
                        memset(buf, 0, sizeof(buf));
                        int numbytes;
                        if ((numbytes=recv(new_fd, buf, 100, 0)) == -1)
                        {
                                perror("recv");
                        }
                        buf[numbytes] = '\0';
                        printf("Received: %s",buf);
                }
                if(FD_ISSET(new_fd, &exfdset))
                {
                        perror("close!!!");
                        close(new_fd);
                        break;
                }
        }
sock_fd为监听描述符,为什么从接收连接后就算没有数据 if(FD_ISSET(new_fd, &rdfdset))
也会一直返回1呀  !!!请帮忙 呀  我急了。。。

论坛徽章:
0
2 [报告]
发表于 2005-12-16 17:01 |只看该作者
...返回的flag中,包含描述符产生错误,描述符被切断,描述符未打开等情报。select的话,如果描述符产生上述错误,将会返回此描述符可读写。程序对此描述符做读写操作的话,read和write系统调用将会返回错误。

引自《FreeBSD操作系统设计与实现》...
我也问过这个问题,谢谢flw的解答...

论坛徽章:
0
3 [报告]
发表于 2005-12-16 17:02 |只看该作者
new_fd加到rdfdset了没?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP