【发布时间】:2018-11-12 17:26:42
【问题描述】:
我正在使用 Select 来监视文件描述符中的事件。
在一个无限循环中,我看到在每次重复时,都会调用FD_ZERO,然后所有文件描述符都附有FD_SET。每次循环开始时所有这些。
while(TRUE)
{
//clear the socket set
FD_ZERO(&readfds);
//add master socket to set
FD_SET(master_socket, &readfds);
max_sd = master_socket;
//add child sockets to set
for ( i = 0 ; i < clients ; i++)
{
//socket descriptor
sd = client_socket[i];
FD_SET( sd , &readfds);
//highest file descriptor number, need it for the select
// function
if(sd > max_sd)
max_sd = sd;
}
//wait for an activity on one of the sockets , timeout is NULL ,
//so wait indefinitely
activity = select( max_sd + 1 , &readfds , NULL , NULL , NULL);
/*
... */
}
我的问题是:我可以在每次循环重复时不使用FD_SET 做同样的事情吗?我的意思是使用FD_ZERO 并在循环之前附加MASTER SOCKET,如果有新的套接字,我们会收到它并在断开连接时使用FD_SET 和FD_CLR 将其删除。我试过但它导致程序只接收一个套接字连接,之后它不再接收连接
【问题讨论】: