2014-12-03 3 views
0

struct sockaddr_un serverUNIXAddress;Является ли Unix сокет, sockaddr_un.sun_path чувствительным к регистру?

Следующий код работает под Mac OS 10.9, но не под Linux. Он также не умирает, но запись с клиента на сервер работает только в Mac OS. Я полностью понимаю, что он тоже не должен работать. Почему это работает в Mac OS? Является ли это ошибкой в ​​реализации сокета или просто особенностью, которая затрудняет перенос, если ошибка не обнаружена?

client.c

//Server domain 
serverUNIXAddress.sun_family = AF_UNIX; 

//Server name 
strcpy(serverUNIXAddress.sun_path, "rockPaperScissors"); 

server.c

strcpy(serverUNIXAddress.sun_path, "RockPaperScissors"); 
//Create file 
bind(serverFd, serverSockAddrPtr, serverLen); 
//Maximum pending connection length 
listen (serverFd, 5); 
////[...] 

ответ

2

UNIX-сокет создается файл в файловой системе. Файловая система по умолчанию для ОС X не зависит от регистра. Таким образом, клиент находит сокет сервера, используя нечувствительность к регистру.

Вы можете использовать файловые системы, чувствительные к регистру, на OS X. Если вы сделали и создали файл сокета там, то совпадение также будет чувствительным к регистру.

Я предполагаю, что Linux поддерживает файловые системы без регистра. Если вы использовали один из них и создали на нем файл сокета, то совпадение будет нечувствительным к регистру.

Смежные вопросы