2017-04-10 13 views
0

리눅스 시스템에서 로컬 추상 소켓에 연결하려고 시도하는 다른 언어로 된 두 개의 프로그램이 있습니다. 둘 중 하나가 실패하고 있습니다. 이유를 결정하는 데 어려움을 겪고 있습니다. 난 단지 strace 출력 수단에서 찾을 수있는 한 가지 차이점을 알고 싶습니다. 그래서 해결할 수 있습니다.strace로 syscall을 연결하는 디버깅 - @ "sun_path"는 무엇을 의미합니까?

[pid 6307] socket(PF_LOCAL, SOCK_SEQPACKET, 0) = 13 
[pid 6307] connect(13, {sa_family=AF_LOCAL, sun_path="qwertystop.bus.8"}, 19) = -1 ENOENT (No such file or directory) 

세 가지 차이점이있다 :

socket(PF_LOCAL, SOCK_SEQPACKET, 0)  = 3 
connect(3, {sa_family=AF_LOCAL, [email protected]"qwertystop.bus.8"}, 19) = 0 

휴무이 strace 출력을 갖는다 :

워킹 일이 strace 출력 갖는다 휴무 한 복수의 PID와 프로그램이다의 connect 호출의 반환 값은 다르며 sun_path 문자열 앞에 @이 있습니다. 나는 소켓 연결이 다른 프로세스에 의해 시작 되었기 때문에 프로세스에서 작동하지 않는다는 사실을 거의 인식하지 못하기 때문에 @이 누락 된 원인이 무엇이든지간에 오류의 원인이 무엇인지 추정합니다. 내가 명시 적으로 나는이 숙제가 대부분 때문이다. 언어를 명시하고 있지 않다 왜, "추상적 인 소켓에 연결"을 일반적인 솔루션을 요구하고 있지 않다 내가 유혹 할 수있는 상황을 만들 거부


(직접 코드 복사).

답변

0

의미 결정. 문자열 앞에 null 바이트가 있음을 의미합니다. 또는 단지 인쇄 할 수없는 문자이거나 소켓이 추상임을 나타내는 것입니다.

0

이것은 리눅스의 문제라고 생각합니다. http://man7.org/linux/man-pages/man7/unix.7.html을 참조하십시오. "abstract socket"아래에 있어야합니다.

+0

'@ '기호는 링크 된 문서에 나타나지 않습니다. –

+0

죄송합니다. 난 널 바이트에 대한 이전 답변에서 그 줄 알았는데. 처음에는 null 바이트가 linux-ism이다. [https://superuser.com/questions/381262/linux-init-local-socket-with](https://superuser.com/questions/381262/linux-init-local-socket-with). 내가 불분명하면 죄송합니다. –