2016-09-28 3 views
0

nodejs를 통해 명명 된 유닉스 도메인 소켓에 연결하려고합니다. 필자는 문서가 유닉스 소켓에 연결하는 것을 지원하는 것으로 보았지만 잘 알려진 위치에서 소켓 파일에 액세스하는 것이 아니라 이름으로 소켓에 연결하는 예를 보지 못했습니다.명명 된 유닉스 도메인 소켓 노드에 연결

제가 소켓 내가 lsof의 (일부 grepping)를 사용하여 생성되는에 연결해야한다는 것을 분명히 알 수 있습니다

는 :

소켓의 이름이 스크립트에 전달되는
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

정확히 모르겠지만 추상적 네임 스페이스 유닉스 도메인 소켓에 연결하거나 만들려면 이름 앞에'\ 0'을 추가해야한다고 생각했습니다. [요약] : 추상 소켓 주소는 사실에 의해 (경로명 소켓으로부터) 구별됩니다. [맨유 (7) :] (http://man7.org/linux/man-pages/man7/unix.7.html) sun_path [0]은 널 바이트 ('\ 0')')이기 때문에'\ 0 # user # 5632 # 1' 또는'\ 0 @ # user # 5632 # 1'을 사용하면 작동합니다. 그러나 나는 결코 그 자신을 시도하지 않았다. –

+0

@ t.niese 적어도 소켓을 찾지 못해서 소켓에 연결할 수 없다는 오류를 변경했지만 노드가이 소켓 유형을 지원하지 않는 것으로 보입니다. 어쨌든 고마워! –

답변

0

노드는 SEQPACKET 소켓을 지원하지 않습니다. 지원을 추가하기위한 기능 요청으로 노드 이슈 트래커에 PR을 제출하거나 SEQPACKET 소켓에 연결할 수있는 노드 애드온을 작성해야 할 수도 있습니다.