标题:select用于socket文件描述符的问题。。
取消只看楼主
cmhjjosso
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-8-27
结帖率:100%
已结贴  问题点数:20 回复次数:4 
select用于socket文件描述符的问题。。
#define MAXLINE 8000

int 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 编辑 ]
搜索更多相关主题的帖子: total 文件 
2012-08-27 15:30
cmhjjosso
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-8-27
得分:0 
自己顶下。。。
2012-08-27 18:02
cmhjjosso
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-8-27
得分:0 
FD_SETSIZE在我的linux上是1024, 我设置为最大的文件描述符加1也是一样的。。。 你说的第二个为空是什么意思。。。 用(fd_set *)0吗? 那个和NULL没有区别吧。。。。
2012-08-27 18:31
cmhjjosso
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-8-27
得分:0 
没人理我么。。。 继续顶上去
2012-08-27 21:55
cmhjjosso
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-8-27
得分:0 
6楼:发现问题了。。。  sets需要重新赋值才可以, 我的确是希望要覆盖, 可惜一直没有覆盖。。。 应该是函数处理问题, 总之重新赋值就OK了
2012-08-29 11:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-380184-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.131914 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved