struct sockaddr_un serverUNIXAddress;
以下代码在 Mac OS 10.9 下有效,但在 Linux 下无效。它不会死,但从客户端写入服务器,只能在 Mac OS 下工作。我完全理解它不应该适用于任何一个。为什么它在 Mac OS 下工作?如果没有发现错误,这是套接字实现中的错误,还是难以移植的特性?
客户端.c
//Server domain
serverUNIXAddress.sun_family = AF_UNIX;
//Server name
strcpy(serverUNIXAddress.sun_path, "rockPaperScissors");
服务器.c
strcpy(serverUNIXAddress.sun_path, "RockPaperScissors");
//Create file
bind(serverFd, serverSockAddrPtr, serverLen);
//Maximum pending connection length
listen (serverFd, 5);
////[...]
最佳答案
在文件系统中创建了一个 Unix 域套接字文件。 OS X 上的默认文件系统不区分大小写。因此,客户端使用不区分大小写的匹配找到服务器的套接字。
您可以在 OS X 上使用区分大小写的文件系统。如果您这样做并在那里创建了套接字文件,那么匹配也会区分大小写。
我假设 Linux 支持不区分大小写的文件系统。如果您使用其中之一并在其上创建套接字文件,则匹配将不区分大小写。
关于c - Unix 套接字的 sockaddr_un.sun_path 区分大小写吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283739/