2014-12-03 1 views
0

struct sockaddr_un serverUNIXAddress;유닉스 소켓, 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

유닉스 도메인 소켓 파일은 파일 시스템에 생성됩니다. OS X의 기본 파일 시스템은 대소 문자를 구분하지 않습니다. 따라서 클라이언트는 대소 문자를 구분하지 않는 일치 항목을 사용하여 서버의 소켓을 찾습니다.

OS X에서 대소 문자를 구분하는 파일 시스템을 사용할 수 있습니다. 거기서 소켓 파일을 만들고 작성했다면 대소 문자를 구분합니다.

Linux가 대소 문자를 구분하지 않는 파일 시스템을 지원한다고 가정합니다. 그 중 하나를 사용하여 소켓 파일을 작성한 경우 일치하는 대소 문자를 구분하지 않습니다.

관련 문제