2016-09-28 4 views
0

nodejs経由で名前付きUnixドメインソケットに接続しようとしています。私はドキュメントがUnixソケットへの接続をサポートしているように見えますが、よく知られている場所でソケットファイルにアクセスするのではなく、名前でソケットに接続する例は見ていません。名前付きUNIXドメインソケットノードに接続

私は明らかに私がに接続する必要があるソケットはlsofを(といくつかのgrepを)を使用して作成されていることがわかります

COMMAND PID USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
run  5632 user 3u unix 0xffff8803dd4b6000  0t0 29647 @#user#5632#1 type=SEQPACKET 

ソケットの名前は実際に私が実行されるスクリプトに渡されますノードスクリプト。私は、次のことを試してみました:

import net = require('net'); 
var socket; 
var element = "#user#5632#1"; //Parsed from args 
try { 
    socket = net.createConnection("@"+element,(error)=>{ 
     if(error){ 
      console.log(error) 
     }else{ 
      console.log("Connection Established "+element);} 
     }); 
     socket.on('error', function(err) { 
      console.log("Error: " + err); 
     }); 
    } catch (error) { 
     console.error(error); 
    } 

は明らかに、私はこの(実行中の異なる点で)いくつかの場所でエラーをキャッチするために包まれていますが、ポイントはのcreateConnectionが投げているということです。

Error: Error: connect ENOENT @#user#5882#1 

net.connectを使用すると、まったく同じエラーが発生します。

よく知られている場所にソケット(ファイル)を作成し、接続していて正常に動作していることをテストしましたが、ノード、または少なくともnetモジュールがサポートしていないようです一時的なソケットに接続します。

これを行う方法があるかどうか、または実際に接続するために、または別の方法で自分のソケット名を異なる形式にする必要があるかどうかは誰にでも分かりますか?

+0

私は確かではありませんが、抽象名前空間のunixドメインソケットに接続したり作成したりする場合は、名前の前に '\ 0'を追加する必要があると思いました。 [抽象的な:抽象ソケットアドレスは、(パス名ソケットから)事実によって区別されている[man UNIX(7):](http://man7.org/linux/man-pages/man7/unix.7.html)あなたが '\ 0#user#5632#1'か' \ 0 @#user#5632#1'のどちらかを使うとうまくいくかもしれません。しかし、私は自分でそれを試みたことはありません。 –

+0

@ t.niese少なくとも、ソケットを見つけられないことからソケットに接続できないというエラーを変更しましたが、Nodeはこのソケットタイプをサポートしていないようです。とにかくありがとう! –

答えて

0

ノードはSEQPACKETソケットをサポートしていません。サポートを追加するための機能リクエストとしてPRをノード課題トラッカーに提出したり、SEQPACKETソケットに接続できるノードアドオンを作成する必要があります。

関連する問題