AF_UNIX를 기존 파일에 바인딩하시겠습니까?

AF_UNIX를 기존 파일에 바인딩하시겠습니까?

Unix 도메인 소켓을 임의의 기존 파일에 바인딩할 수 있나요? 그렇지 않은 경우 소켓에서 사용하는 파일을 어떻게 식별합니까?

답변1

Unix 도메인 소켓을 임의의 기존 파일에 바인딩할 수 있습니까?

캔트. 파일이 존재하지 않아야 합니다. 그렇지 않으면 bind(2)실패합니다 EADDRINUSE. bind(2)에 지정된 경로를 사용하여 새 파일이 생성됩니다 .sun_path.

그렇지 않은 경우 소켓에서 사용하는 파일을 어떻게 식별합니까?

lsof도움이 될 수도 있습니다. 많아야 하나보다.

또는 ss:

$ nc -Ul foo &
[3] 9268
$ ls -i ./foo
1179674 ./foo
$ ss -elx | grep -w 1179674
u_str LISTEN  0  5 foo 618789 * 0 <-> ino:1179674 dev:0/2072 peers:

( ss위 출력은 수동으로 공백으로 잘렸습니다.)

-l옵션은 ss청취 소켓만 직접 선택하고, 이 -x옵션은 Unix 소켓만 선택하며, -e파일과 일치하는 데 사용한 inode 번호로 확장 정보를 인쇄하는 옵션입니다.

둘 다 현재 소켓만 볼 ss수 있습니다 .lsof네트워크 네임스페이스;그러나 서로 다른 네트워크 네임스페이스의 두 Unix 소켓은 동일한 파일에 바인딩할 수 없습니다.

장치 번호도 일치하는지 확인하고 싶을 수도 있지만 주의해서 진행해야 합니다.sock_diag(7)(by ss)는 커널이 내부적으로 사용하는 형식으로 반환 MMMm mmmm하지만( ) Buggy는 ss이를 사용자 영역 형식으로 처리합니다 mmmM MMmm. 위 예의 장치 번호는 가 아니지만 0/2072( 8/24) /dev/sdb8;-)

관련 정보