공개 유닉스 도메인 소켓을 만드는 방법은 무엇입니까?

공개 유닉스 도메인 소켓을 만드는 방법은 무엇입니까?

고려하다 /var/run/acpid.socket. 언제든지 연결하고 연결을 끊을 수 있습니다. 다음과 비교해보세요 nc:

$ nc -l -U ./myunixsocket.sock
Ncat: bind to ./myunixsocket.sock: Address already in use. QUITTING.

nc분명히 일회용 소켓만 허용됩니다. 그래서 질문은 /var/run/acpid.socket여러 용도로 사용하고 재사용할 수 있도록 이와 같은 소켓을 만드는 방법입니다.

답변1

-k이를 수행하도록 선택할 수 있습니다 nc.

-k      Forces nc to stay listening for another connection after its cur-
         rent connection is completed.  It is an error to use this option
         without the -l option.  When used together with the -u option,
         the server socket is not connected and it can receive UDP data-
         grams from multiple hosts.

예:

$ rm -f /tmp/socket    # unlink the socket if it already exists
$ nc -vklU /tmp/socket # the server
Connection from mack  received!
yes
Connection from mack  received!
yes
...

사용 후 소켓을 사용하는 것이 좋습니다 unlink(). 그러나 실제로 대부분의 프로그램은 소켓이 존재하는지 확인하고 삭제합니다.앞으로이를 호출하십시오 . 파일 시스템에 소켓 경로가 존재하고 이에 액세스하려고 하면 bind()어떤 프로그램에서도 이를 사용하지 않더라도 bind()오류가 발생합니다 .EADDRINUSE

Linux에서 이러한 혼란을 피하는 한 가지 방법은 다음을 사용하는 것입니다."추상적인"유닉스 소켓이지만 netcat.

관련 정보