POSIX select 从不 Returns 积极

POSIX select Never Returns Positive

select 在客户端连接后使用 UNIX 域套接字服务器调用时从不 returns。

为了清楚起见,我的代码没有错误检查和安全性:

服务器:

int socketServer = socket(AF_UNIX, SOCK_STREAM, 0);
struct sockaddr_un address;
address.sun_family = AF_UNIX;
strcpy(address.sun_path, "/tmp/unixdomainsocket");
bind(socketServer, (struct sockaddr*)&address, sizeof(struct sockaddr_un));
listen(socketServer, 5);

fd_set handleSet;
FD_ZERO(&handleSet);
FD_SET(socketServer, &handleSet);

struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 10000000;

printf("%d\n", select(1, &handleSet, NULL, NULL, &timeout));

close(socketServer);
unlink("/tmp/unixdomainsocket");

客户:

echo "Hello from the borne again shell! | nc -U /tmp/unixdomainsocket

我该怎么做才能解决这个问题?我发现的例子说这应该有效,但文档只是说这是为了阅读。当我尝试使用为第四个参数设置的句柄时,它仍然不 return true.

当 shell 连接到服务器时,服务器和客户端只是等待超时然后退出。

您的问题就在这里:select(1,nfds 值应该是:"the highest-numbered file descriptor in any of the three sets, plus 1"(我系统上的 socket(2) 联机帮助页这么说)。

我打赌你的 socketServer fd 是 3。你应该使用 socketServer + 1 而不是 1