コマンドラインからUnix名前付きソケットを作成する


回答:


21

ソケットにはmkfifoとまったく同じものはありません。つまり、「ハング」ソケットを作成するだけのコマンドはありません。これは歴史的な理由によるものです。名前がすでに使用されている場合、ファイルシステムにソケット名/ inodeを作成するサーバーの関数bind()は失敗します。つまり、サーバーは既存のソケット上で動作できません。

したがって、ソケットを以前に作成した場合は、とにかくサーバーによって削除する必要があります。メリットはありません。Gregoryの答えからわかるように、netcatなどのサーバーを保持している場合は、ソケットを作成できます。サーバーがなくなると、古いソケットはなくなります。新しいサーバーには新しいソケットがあり、ソケットの名前が同じであるにもかかわらず、すべてのクライアントが再接続する必要があります。


15

最新のnetcat(nc)および同様のプログラム(私の知る限りsocat)には、ドメインソケットオプションがあります。
それ以外の場合、ucspi-unixを見ることができます


1
ncBSDの場合は+1 。
クリントPachl 14

1
Debianの場合:# sudo apt-get install netcat-openbsd
Dr. Koutheir Attouchi

2
あなたはそれをインストールしたら、[OK]を、どのように「ソケットファイル」を作成します
アレクサンダー・ミルズ

8

Pythonを使用できます:

python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/test.sock')"

また、C、この回答を参照してください。


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }シェルを簡単に使用するには: mksock /tmp/test.sock
Tino

0

netcatはそのような場合に単に使用し、聞き続けます:

nc -lkU aSocket.sock

netcat-openbsdを使用する必要があります。netcat-traditional-Uには、Unixドメインソケット用のスイッチはありません。


-k現在の接続が完了した後、ncが別の接続を待機し続けるようにします。-lオプションなしでこのオプションを使用するとエラーになります。-U UNIXドメインソケットの使用を指定します。
ヨハンブール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.