mills 发表于 2003-09-24 16:44

求教:select描述符同时可读写问题

是服务器的一端accept后得到新的描述符sd
FD_ZERO(&wmask);
FD_ZERO)&remask);   
FD_SET(sd,&remask);
    FD_SET(sd,&wmask);
   select(sd+1,&remask,&wmask,(fd_set *)0,NULL);
我要对sd 写消息。一旦对方关闭我也关掉他
if (FD_ISSET(sd,&wmask))printf("read\n");
if(FD_ISSET(sd,&remask))printf(write\n");
程序运行后:
一旦有客户端上来就会打印:"write"
一旦客户端关掉就会打印:“read"
                                        "write"
求教为什么啊

flw 发表于 2003-09-24 17:00

求教:select描述符同时可读写问题

就是这样子的,对着呢!

mills 发表于 2003-09-24 17:18

求教:select描述符同时可读写问题

那我现在就是通过if(FD_ISSET(sd,&wmask)&&FD_ISSET(sd,&remask)) 成立,说明对方关掉,所以我close(sd);
这样对吗?
还有为什么一旦是客户端连上不是打印"read"啊

mills 发表于 2003-09-24 17:18

求教:select描述符同时可读写问题

那我现在就是通过if(FD_ISSET(sd,&wmask)&&FD_ISSET(sd,&remask)) 成立,说明对方关掉,所以我close(sd);
这样对吗?
还有为什么一旦是客户端连上不是打印"read"啊而是"write"呢

gadfly 发表于 2003-09-24 18:03

求教:select描述符同时可读写问题


if (FD_ISSET(sd,&wmask))printf("read\n");
if(FD_ISSET(sd,&remask))printf(write\n");

没写错吧?

另外,你要判断关闭,直接监控rdset就可以了,read的时候是0,就说明
对方关闭。而不是判断两个set是否可读写。

mills 发表于 2003-09-24 18:05

求教:select描述符同时可读写问题

对不起写错了

mills 发表于 2003-09-24 18:32

求教:select描述符同时可读写问题

我测了多次,当对方关掉后端口就可读可写啊

gadfly 发表于 2003-09-24 22:19

求教:select描述符同时可读写问题

没错,关闭是会出现你说的这种现象。但是你试过发送数据,同时对方有数据来的这种情况么?会不会也出现这种现象?

总之,这种方式测试socket关闭,并不合适。

mills 发表于 2003-09-25 08:59

求教:select描述符同时可读写问题

谢谢各位我再思考一下

蓝色键盘 发表于 2003-09-25 14:09

求教:select描述符同时可读写问题

楼主测试一个读便可。没必要测试写集合。
页: [1] 2
查看完整版本: 求教:select描述符同时可读写问题