/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
に類似したソケットを作成するにはどうすればよいですか?
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
ではサポートされていないようです。