web-dev-qa-db-ja.com

パブリック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

ncの_-k_オプションを使用して行います。

_-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()することをお勧めします-しかし、実際、ほとんどのプログラムは、ソケットが存在するかどうかを確認し、before呼び出しの前に削除しますbind()その上;ソケットパスがファイルシステムに存在し、それにbind()しようとすると、プログラムがそれを使用していない場合でも、EADDRINUSEエラーが発生します。

Linuxでこの混乱を回避する1つの方法は、 "abstract" unixソケットを使用することですが、netcatではサポートされていないようです。

1
mosvy