두 프로세스가 동일한 Berkeley/Unix [파일] 소켓을 수신하면 어떻게 되나요?

두 프로세스가 동일한 Berkeley/Unix [파일] 소켓을 수신하면 어떻게 되나요?

동일한 프로세스를 수신하도록 두 프로세스를 설정하면 어떻게 되나요?버클리 아울렛?

메시지가 두 곳 모두로 라우팅되나요? 어느 것도 아니다? 둘 중 하나? 그렇다면 어떻게 해야 할까요?

특히 gunicorn동일한 경로를 사용하여 두 프로세스를 모두 시작할 수 --bind unix:있으며 명백한 오류는 발생하지 않습니다.

gunicorn --bind=unix:/path/to/some/socket 

SE나 다른 곳에서는 명확한 답을 찾을 수 없지만 매우 간단한 질문인 것 같습니다.

답변1

두 가지 프로세스할 수 없다동일한 Unix 소켓에 바인딩하고 수신합니다. 기존 UNIX 소켓에 바인드하려고 시도하는 프로세스는 EADDRINUSE오류를 수신합니다.

특히 동일한 --bind unix:/를 사용하여 두 개의 gunicorn 프로세스를 시작할 수 있으며 명백한 오류는 발생하지 않습니다.

프로세스가 gunicorn바인딩하기 전에 실제로 소켓 파일을 삭제할 가능성이 높으므로 결국 바인딩이 종료됩니다.다른유닉스 소켓.

Unix 소켓의 실제 주소는 device_id:inode액세스 경로가 아니라 튜플이라는 점을 기억하세요. Unix 소켓을 삭제하면 동일한 경로에 바인딩된 프로그램이 결국 다른 inode를 가진 다른 소켓 파일을 생성하게 됩니다.

참고: 이 모든 것은 "일반" 파일 시스템 상주 Unix 소켓에 적용됩니다. 리눅스에도 있다추상적인소켓 이름이 실제 주소이고 어떤 종류의 파일 시스템 객체도 사용되지 않는 유닉스 소켓. 이러한 경우에는 두 개의 소켓을 동일한 주소에 바인딩할 수도 없습니다.

관련 정보