select用于socket文件描述符的问题。。
#define MAXLINE 8000int main()
{
int fd, n, i, get=0, total=0;
int fds[30];
struct sockaddr_in servaddr;
char buf[5000], buf2[5000];
fd_set sets;
FD_ZERO(&sets);
for(i=0;i<30;i++){
fd = socket( AF_INET, SOCK_STREAM, 0 );
fds[i] = fd;
FD_SET(fd, &sets);
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
servaddr.sin_port = htons(80);
connect( fd, (struct sockaddr *)&servaddr, sizeof(servaddr));
sprintf( buf, "GET / HTTP/1.0\r\nHost:127.0.0.1\r\nUser-Agent:ss\r\n\r\n");
write(fd, buf, strlen(buf));
}
while(1){
get = select(FD_SETSIZE, &sets, NULL, NULL, NULL);
for(i=0;i<30;i++){
if(FD_ISSET(fds[i], &sets)){
FD_CLR(fds[i], &sets);
printf("%d\n", ++total);
}
}
if(total == 30)
break;
}
}
这是什么情况 明明另外几个文件描述符是可以写的 select没事返回。。。
结果是
get one
1
get one
2
get one
3
get one
4
get one
5
get one
6
get one
7
get one
8
get one
9
get one
10
然后就卡住了。。。
[ 本帖最后由 cmhjjosso 于 2012-8-27 18:03 编辑 ]