그 이유에 관해서, nwildner는 이미 훌륭한 답변을 썼습니다 .
여기서는 방법과 상대 경로 사용법에 중점을 둘 것입니다.
내부적으로 소켓 파일은 이름으로 조회 할 수 있지만 일반적으로 inode에서 조회합니다. Linux에서이 조회는 net / unix / af_unix.c에unix_find_socket_byinode()
정의 된 기능으로 보장됩니다 .
다음과 같이 쉽게 확인할 수 있습니다.
- 두 개의 디렉토리 A / 및 B /를 작성하십시오 .
- 각 디렉토리에서 프로세스가 동일한 이름을 가진 소켓 파일에서 청취하도록하십시오. 다음과
socat
같은 명령을 사용합니다.
$ socat UNIX-LISTEN:./my.sock -
- 이제 A / my.sock 을 B /로 또는 그 반대로 이동하여 소켓 파일을 교환하십시오 .
- 이제부터 클라이언트 응용 프로그램이 A / my.sock에 연결 되면 서버 B 에 연결되고 B / my.sock에 연결 되면 서버 A에 연결됩니다 (통신이 끝나면 서버 프로세스가 진행될 수 있음에 유의하십시오) 자체 소켓 파일이라고 생각되는 것을 합법적으로 삭제하십시오).
소수의 유닉스 시스템 (Linux Debian, FreeBSD 및 OpenIndiana에서 다양성을 얻음) 에서이 동작을 확인 했으므로이 동작은 표준이 아닌 경우 적어도 널리 퍼진 것으로 보입니다.
클라이언트 프로세스가 서버와 초기 통신을 설정하는 방법을 알지 못할 수 있으므로 절대 경로는 일반적으로 클라이언트와 서버 프로세스 간의 규칙으로 사용됩니다.
그러나이 초기 통신이 문제가되지 않으면 소켓 파일 작성에 상대 경로를 사용하는 것이 안전 해 보일 수 있으므로 소켓 파일 위치가 서버 프로세스에 의해 직접 제어되지 않을 때 경로 길이 문제를 피할 수 있습니다.