両方のプロセスが同じBerkeley / Unix [ファイル]ソケットを受け取るとどうなりますか?

両方のプロセスが同じBerkeley / Unix [ファイル]ソケットを受け取るとどうなりますか?

同じプロセスを受け取るように両方のプロセスを設定するとどうなりますか?バークレーアウトレット

メッセージは両方の場所にルーティングされますか?どれでもない?どちらか?それでは、どうすればいいですか?

特に、gunicorn同じパスを使用して両方のプロセスを開始でき--bind unix:、明らかなエラーは発生しません。

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

SEや他の場所では明確な答えが見つかりませんが、非常に簡単な質問のようです。

ベストアンサー1

2つのプロセスできない同じUnixソケットにバインドして受信します。既存のUNIXソケットにバインドしようとするプロセスはEADDRINUSEエラーを受け取ります。

特に、同じ --bind unix:/ を使用して 2 つの gunicorn プロセスを開始できますが、明らかなエラーは発生しません。

プロセスがgunicornバインドする前に実際にソケットファイルを削除する可能性が高いため、結局バインディングは終了します。その他Unixソケット。

Unixソケットの実際のアドレスはアクセスパスdevice_id:inodeではなくタプルであることを覚えておいてください。 Unixソケットを削除すると、同じパスにバインドされたプログラムは最終的に異なるinodeを持つ別のソケットファイルを生成します。

注:これはすべて「一般」ファイルシステム常駐Unixソケットに適用されます。 Linuxにもあります抽象的なソケット名が物理アドレスであり、どの種類のファイルシステムオブジェクトも使用されないUnixソケット。この場合、2つのソケットを同じアドレスにバインドすることはできません。

おすすめ記事