パブリックUnixドメインソケットを作成するには?

パブリックUnixドメインソケットを作成するには?

考慮してください/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 でこのような混乱を避ける 1 つの方法は、以下を使用することです。「抽象的」Unixソケットですがnetcat

おすすめ記事