2016-09-28 1 views
0

Ich versuche, über nodejs eine Verbindung zu einem benannten Unix-Domain-Socket herzustellen. Ich habe gesehen, dass die Dokumente die Verbindung zu Unix-Sockets zu unterstützen scheinen, ich habe jedoch keine Beispiele für die Verbindung zu einem Socket nach Namen und nicht durch Zugriff auf eine Socket-Datei an einem bekannten Ort gesehen.Verbinden mit Named Unix Domain Socket Node

ich, dass die Buchse deutlich sehen kann ich mithilfe von lsof (und einige Grepping) zu werden erstellt verbinden müssen:

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

Der Name der Buchse an das Skript wird übergeben, die tatsächlich läuft mein Knotenscript. Ich habe versucht, die folgenden:

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); 
    } 

Klar, ich habe diese verpackt Fehler an einigen Stellen zu fangen (an verschiedenen Punkten in der Ausführung), aber der Punkt ist, dass Create wirft:

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

Die Verwendung von net.connect verursacht genau den gleichen Fehler.

Ich testete das Erstellen eines Sockets (Datei) an einem bekannten Ort, und die Verbindung zu ist, und das hat gut funktioniert, aber so weit wie ich festgestellt habe, Knoten oder zumindest das net Modul scheint nicht zu unterstützen Verbindung zu ephemeren Sockeln.

Jeder weiß, ob es eine Möglichkeit gibt, dies zu tun, oder wenn ich meinen Socket-Namen anders formatieren muss, um eine Verbindung herzustellen oder wirklich Hilfe?

+0

Ich bin nicht genau sicher, aber ich dachte, Sie müssen ein '\ 0' vor dem Namen hinzufügen, wenn Sie eine Verbindung zu einem abstrakten Namespace Unix Domain Socket herstellen oder erstellen möchten. [man UNIX (7):] (http://man7.org/linux/man-pages/man7/unix.7.html) ('abstract: eine abstrakte Socket-Adresse wird von der Tatsache unterschieden (von einem Pfadnamen-Socket) Dieser sun_path [0] ist ein Null-Byte ('\ 0') ') Es könnte also funktionieren, wenn Sie entweder' \ 0 # user # 5632 # 1' oder '\ 0 @ # user # 5632 # 1' verwenden. Aber das habe ich selbst nie versucht. –

+0

@ t.niese Das änderte zumindest den Fehler, dass der Socket nicht gefunden werden konnte, um keine Verbindung zum Socket herzustellen, aber trotzdem scheint Node diesen Socket-Typ nicht zu unterstützen. Danke trotzdem! –

Antwort

0

Der Knoten unterstützt keine SEQPACKET-Sockets. Sie können eine PR an den Node-Issue-Tracker als Feature-Anforderung senden, um Unterstützung hinzuzufügen, und/oder Sie müssen möglicherweise ein Node-Addon schreiben, mit dem Sie eine Verbindung zu SEQPACKET-Sockets herstellen können.

Verwandte Themen