当前进程最大文件描述符限制FD_SETSIZE

Mayday5程序员 2015-07-16 11:34:15
在查看select中的FD_SETSIZE时,我客户端使用了while循环 ,不断的创建客户端与服务器相连,通过连接的数量来看FD_SERSIZE,应该是为count=1020,但是我的结果却是

最后调试提示是FD_SET(coon,&allset)有问题。这与自己想的不一样啊 为啥会这样的啊
以下是服务器的部分代码
  int main()                                        
{
printf("%d\n",FD_SETSIZE);
int count=0;
int listenfd;

if((listenfd=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))<0)
{
printf("Socket Fail");
return 0;
}
printf("%d\n",listenfd);

struct sockaddr_in servaddr;
memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(1288);
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
int on=1;
if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on))<0)
{
printf("Setsocket Fail");
return 0;
}

if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
{
printf("Bind Fail");
return 0;
}
if(listen(listenfd,4)<0)
{
printf("Listen Fail");
return 0;
}
struct sockaddr_in peeraddr;
int conn;
fd_set rset;
fd_set allset;
FD_ZERO(&rset);
FD_ZERO(&allset);
FD_SET(listenfd,&allset);
int client[FD_SETSIZE];
int i;
int maxi=0;
for(i=0;i<FD_SETSIZE;i++) //设置为空闲的位置
client[i]=-1;
int maxfd=listenfd;
int nready;

while(1)
{
rset=allset; //rest allset均为集合
nready=select(maxfd+1,&rset,NULL,NULL,NULL);
if(nready==-1)
{
if(errno==EINTR)
continue;
ERR_EXIT("SELECT");
}
if(nready==0)
continue;
if(FD_ISSET(listenfd,&rset))
{
socklen_t peerlen =sizeof(peeraddr);
conn=accept(listenfd,(struct sockaddr*)&peeraddr,&peerlen);
if(conn==-1)
{
ERR_EXIT("accept\n");
}
for(i=0;i<FD_SETSIZE;i++)
{
if(client[i]<0)
{
client[i]=conn;
if(i>maxi)
maxi=i;
break;
}
}
if(i==FD_SETSIZE)
{
fprintf(stderr,"too many clients\n");
exit(EXIT_FAILURE);
}
printf("ip=%s port=%d\n",inet_ntoa(peeraddr.sin_addr),
ntohs(peeraddr.sin_port));
printf("count=%d\n",++count);
FD_SET(conn,&allset);
}
...全文
635 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧