2013-08-12 9 views
1

나는 그것을 accept()가 모니터의 포트에 연결을이야 할 때 (x)는 inetd에 소켓이 생성되고 있다는 점에서, 대부분의 데몬처럼 작동한다는 가정. 어떻게 든하지만, 그것은 fork()들과 exec()의 대상 서비스 프로그램을하기 전에,이 세 가지 표준 I로이 양방향 소켓을 변환 관리/O는 STDIN, STDOUT, 및 STDERR는 디스크립터. (x) inetd가 연결된 소켓을 STDIN/STDOUT/STDERR로 "분할"합니까?

내가 성공하지 inetd를 내 자신의 버전을 압연없이이 동작을 격파하는 방법에 주위에 물어 봤는데. 이 방식으로 질문을하는 것이 나에게 발생했습니다. 파일 기술자 0, 1 및 2를 단일 소켓에 "결합"하는 방법에 대한 단서를 제공하기 때문입니다.

내가 하나의 소켓을 통해 양방향 서비스 프로그램이 통신하고자하는 이유

는 하나의 양방향 소켓을 기반으로하는 I/O 인프라를 사용할 필요가 있다는 것입니다. inet.d 서버

+0

방법을 잘 당신은 FDS는 0, 1, 2 모두 단순히 동일한 기본 소켓에 언급되지 않은 것을? –

+0

음 ... 나는 아니에요. 그러나 하나를 선택하여 양방향으로 사용할 수 없습니다. 예를 들어 STDIN에 쓰면 오류가 발생합니다. 디스크립터가 쓰기 위해 닫혀 있다고 생각합니다. – Chap

+0

흠. 거기에 무슨 일이 일어나고 있는지 모르겠지만, 나는 inetd 하에서 실행해야하는 코드를 실제로 다루지 않았습니다. 그러나 유닉스와 마찬가지로 모든 일이 당신이 상상하는 것보다 더 간단 할 것입니다. :) –

답변

0

수신 데이터는 표준 입력 는 fprintf (표준 출력) & 인 fprintf (열려진)에 매핑 될 inet.d하여 클라이언트에게 전송할 것이다 핸들러 하나의 스트림으로 결합.

여기서 문제는 텔넷 클라이언트입니다. 은 stdout과 stderr 스트림을 구분할 수 없습니다.. 필요한 사용 ssh를 대신 텔넷 경우, 그 옵션을 제공합니다.