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'을 추가해야한다고 생각했습니다. [요약] : 추상 소켓 주소는 사실에 의해 (경로명 소켓으로부터) 구별됩니다. [맨유 (7) :] (http://man7.org/linux/man-pages/man7/unix.7.html) sun_path [0]은 널 바이트 ('\ 0')')이기 때문에'\ 0 # user # 5632 # 1' 또는'\ 0 @ # user # 5632 # 1'을 사용하면 작동합니다. 그러나 나는 결코 그 자신을 시도하지 않았다. –
@ t.niese 적어도 소켓을 찾지 못해서 소켓에 연결할 수 없다는 오류를 변경했지만 노드가이 소켓 유형을 지원하지 않는 것으로 보입니다. 어쨌든 고마워! –