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
;-)