2010-01-04 2 views
39

리눅스에서는 소켓을 열고 다른 프로세스로 소켓을 전달할 수 있습니까? 예인 경우 예를 어디에서 찾을 수 있습니까?소켓을 열고 리눅스의 다른 프로세스로 넘길 수 있습니까?

감사합니다. 다른 하나 개의 프로세스에서 SCM_RIGHTS와 사용 예 당신이 할 수있는

+0

가능한 복제본 [파일 설명자를 리눅스의 다른 프로세스에 공유 할 수 있습니까, 아니면 프로세스에 로컬이 될 수 있습니까?] (http://stackoverflow.com/questions/2358684/can-i-share-a-file- descriptor-to-another-process-on-linux-or-are-they-local-to-t) – Gilles

답변

53

, sendmsg() :

SCM_RIGHTS - 보내거나 다른 과정에서 파일 기술자 세트를받을 수 있습니다. 데이터 부분에는 파일 디스크립터의 정수 배열 이 포함됩니다. 전달 된 파일 설명자는 dup(2)으로 생성되었지만 으로 동작합니다.

비록 일반적인 사용하지 http://linux.die.net/man/7/unix

. 더 일반적으로 프로세스가 부모로부터 소켓을 상속받을 때 ( fork() 이후). 닫히지 않은 모든 파일 핸들 (소켓 포함)은 하위 프로세스에서 사용할 수 있습니다. 따라서 자식 프로세스는 부모 소켓을 상속받습니다.

연결을 수신하는 서버 프로세스를 데몬이라고합니다. 이것은 일반적으로 각 새 연결을 포크하고 각 새 요청을 처리하는 프로세스를 생성합니다. 전형적인 데몬의 예는 여기에 있습니다 :

http://www.steve.org.uk/Reference/Unix/faq_8.html#SEC88

아래로 스크롤 process()을 무효로 할 수 있습니다.

+14

모든 요청에 ​​대해 새 프로세스를 포크 화하지 않고 요청을 작업자 집합에 전달하지 않는 한 . – magiconair

+0

이것은 AF_UNIX에만 해당됩니다. TCP 소켓에 대해이 작업을 수행 할 수 있습니까? –

+5

@AdrianRatnapala : 아니요, TCP를 통해 다른 컴퓨터에 소켓 (또는 파일 핸들)을 보낼 수 없으며 동일한 커널 내에 있어야합니다. 그래서 당신이 통신하는 채널은 AF_UNIX 여야하지만, 전송하는 파일 핸들은 당연히 TCP 소켓 일 수 있습니다. – Zarat

관련 문제