|
发表于 2005-2-6 12:27:45
|
显示全部楼层
看出几个问题
1. select的第一个参数搞错了吧
2. select返回后set应该根据触发的情况改变了,下次循环要重新设置
Post by icoming
- fd_set set;
- struct timeval timeout
- FD_ZERO(&set);
- FD_SET(socket1, &set);
- FD_SET(socket2, &set);
- timeout.tv_sec=10;
- timeout.tv_usec=0;
- for(int i=0 ; i < 20 ; i++)
- {
- [color=Blue] /* 在每次循环中重新设置set,怎么设自己看着办了 */
- FD_ZERO(&set);
- FD_SET(socket1, &set);
- FD_SET(socket2, &set);
- [/color]
- select(max(socket1 , socket2)[color=Blue] +1[/color], &set , NULL , NULL , ); [color=Blue] /* 忘记加1了吧 */ [/color]
- if(FD_ISSET(socket1 , &set))
- {
- int size=recv(socket1 , buffer , size , NULL);//不好意思,recv()的最后一个参数我忘掉了,好像大概是这样。
- if(size == 0)
- FD_CLR(socket1 , &set);
- }
- if(FD_ISSET(socket2 , &set))
- {
- int size=recv(socket2 , buffer , size , NULL);
- if(size == 0)
- FD_CLR(socket2 , &set);
- }
- }
复制代码
这样一旦有一个连接断开,接下来的几次都是从那个断开的连接中返回。我想把这个断开的连接从整个套接字集中删除,可是上面的代码好像有问题,还是每次都在断开的套接字集中返回,而且每次都是返回的都是0。 |
|