select
时永远不会返回。
我的代码,没有错误检查和安全性:
服务器:
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
我该怎么做才能解决此问题?我发现的示例说这应该可行,但是文档只是说这是供阅读。当我尝试使用第四个参数的句柄集时,它仍然不会返回true。
当Shell连接到服务器时,服务器和客户端只需等待超时然后退出即可。
答案 0 :(得分:1)
您的问题就在这里:select(1,
。 nfds
的值应为:“三组中编号最高的文件描述符,加1”(这样说,就是我系统上的socket(2)联机帮助页)。
我敢打赌,您的socketServer
fd为3。您应该使用socketServer + 1
而不是1
。