免费注册 查看新帖 |

Chinaunix

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

怎么从sock读出的字节个数总为0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-23 22:48 |只看该作者 |倒序浏览
select(maxfd, &rser, NULL, NULL, NULL);

if (FD_ISSET(sockfd, &rset) )
{

    read_len = read(sockfd, read_buf, MAX_LEN);
....
}

而且一直有东西可读,但是read_len总为0;

为什么?

论坛徽章:
0
2 [报告]
发表于 2003-07-23 22:53 |只看该作者

怎么从sock读出的字节个数总为0

但是第一次给服务器发送数据后,收到了服务器的响应,read_len = 5

到底是那有问题?

论坛徽章:
0
3 [报告]
发表于 2003-07-24 07:38 |只看该作者

怎么从sock读出的字节个数总为0

以后文问题尽量给出较完整的程序段,有时问题可能就
发生在你认为没有问题的地方。
我猜测你的问题在于:     
如果你在一个循环里调用select
那么你应该在循环中初始参数 fd_set ,因为什么,
想想就知道了。

论坛徽章:
0
4 [报告]
发表于 2003-07-24 08:45 |只看该作者

怎么从sock读出的字节个数总为0

FD_ZERO(&(fst.rset));
FD_SET(fst.ias_sockfd, &(fst.rset));
maxfd = fst.ias_sockfd + 1;
     
while(1)
      {
         FD_ZERO(&(fst.rset));
         FD_SET(fst.ias_sockfd, &(fst.rset));
         maxfd = fst.ias_sockfd + 1;

         printf("!!!!!!!!!!\n";
         rtn = select(maxfd, &(fst.rset), NULL, NULL, &time_interval);
         if (rtn < 0)
         {
            log_write(fst.logfile, "Select failed!";
            break;
         }

         if( FD_ISSET(fst.ias_sockfd, &(fst.rset)) )
         {
            memset(left_buf, 0x00, sizeof(left_buf));
            memset(read_buf, 0x00, sizeof(read_buf));
            read_len = 0;
            left_len = 0;
            printf("sockfd = %d\n", fst.ias_sockfd);
            read_len = read(fst.ias_sockfd, read_buf, BUF_MAX_LEN);
            /* read_len = readn(fst.ias_sockfd, read_buf, BUF_MAX_LEN); */

            printf("read_len = %d\n", read_len);

            if (read_len >; 0)
            {
               formatbuftostr(printbuf, read_buf, read_len, ;
               log_write(fst.logfile, "\n%s", printbuf);

               if ( read_len >;= 4)
               {
                      if (processdata(read_buf, read_len) < 0)
                      break;/*FD_CLR(fst.ias_sockfd, &(fst.rset));*/
               }
            }
            else if (read_len == 0)
            {
               FD_CLR(fst.ias_sockfd, &(fst.rset));
            }
            else /* read_len<0 */
            {
               log_write(fst.logfile, "Read Error data from socket. Data length=
%d\n", read_len);
               FD_CLR(fst.ias_sockfd, &(fst.rset));
               closeconnection(&fst);
               break;
            }
         }/* FD_ISSET */

/*
sleep(5);
rtn = sendtdata(&fst, testmjf, 23);
if (rtn < 0)
{
log_write(fst.logfile, "test: send data failed.";
}
*/

论坛徽章:
0
5 [报告]
发表于 2003-07-24 08:46 |只看该作者

怎么从sock读出的字节个数总为0

/*
sleep(5);
rtn = senddata(&fst, testmjf, 23);
if (rtn < 0)
{
log_write(fst.logfile, "test: send data failed.";
}
*/
加上这一段,运行4次就退出了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-07-24 10:01 |只看该作者

怎么从sock读出的字节个数总为0

你的找个问题可能是select的描述子集引起的,select每次返回,而且第一次能够处理成功,仔细看看select对于描述字集的初始化和测试部分。
landwater 该用户已被删除
7 [报告]
发表于 2003-07-24 10:45 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2003-07-24 10:53 |只看该作者

怎么从sock读出的字节个数总为0

收发那有问题?能不能说的详细写。

论坛徽章:
0
9 [报告]
发表于 2003-07-24 12:20 |只看该作者

怎么从sock读出的字节个数总为0

if (FD_ISSET(sockfd, &rset) ) ?????
-1 和1 都成立 而灾两个一个是错误一个是正确

论坛徽章:
0
10 [报告]
发表于 2003-07-24 14:47 |只看该作者

怎么从sock读出的字节个数总为0


当socket 异常时,read返回字节数为0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP