【发布时间】:2012-04-19 12:26:39
【问题描述】:
我的问题是:如何(使用 select())知道新客户端是否正在连接我的服务器? A 不能只使用accept,因为accept() 正在阻塞...
示例: 我在 fd user1 (fd = 4) 和 user2 (fd = 5) 上设置了两个客户端。所以,我用 select 来知道谁在套接字上写:
FD_ZERO(read_fds);
FD_SET(user1, read_fds);
FD_SET(user2, read_fds);
error = select(user2 + 1, read_fds, NULL, NULL, NULL);
if (FD_ISSET(user1, read_fds) == 1)
printf("user1 talks.\n");
...
但是我想知道如果有新用户连接到服务器,我该怎么办? 我试过了:
FD_ZERO(read_fds);
FD_SET(user1, read_fds);
FD_SET(user2, read_fds);
FD_SET((user2 + 1), read_fds);
error = select(user2 + 2, read_fds, NULL, NULL, NULL);
if (FD_ISSET(users2 + 1) == 1)
{
printf("New user.\n");
accept(..., ...);
}
...
但是使用这段代码,每次都选择 return -1...
解决方案? ^^
【问题讨论】: