2010-08-21 1 views
0

유닉스 소켓과 sendmsg/recvmsg를 사용하여 소켓 파일 디스크립터를 요청을 잃지 않고 새 서버 프로세스에 전달하기 위해 웹 서버를 가지고 놀고있다. ab로 테스트하는 동안 클라이언트 연결이 끊어지는 것을 발견했으며 apachebench (ab)는 "apr_poll : 지정된 제한 시간이 만료되었습니다 (70007)"오류를 표시합니다.파일 설명자 전달을 사용할 때 기존 연결 상태?

열려있는 연결을 쓸모 없게 만드는 파일 설명 자의 주소가 변경되었다고 의심되었지만 모든 요청이 끝날 때 연결이 닫히지 않았는지 확인해야했지만 두 가지 요청 실패 할 것이다.

소켓 레벨에 이상한 점이 있습니까? 아니면 이상하게 보입니까? 내가 고려해야 할 다른 것이 있습니까?

편집 : PHP를 클라이언트로 사용하여주기 동안 요청을 처리합니다.

+0

당신이 서버 소켓 (당신이 받아들이라고 부르는 것)을 전달하고 있습니까, 아니면 개별 접속 소켓을 다른 서버 프로세스로 전달합니까? – user239558

+0

@ user239558 서버 소켓에 전달. – Scott

답변

0

전화선을 통해 전화를 보내려고하는 것과 같습니다. 그것은 아무 의미가 없습니다. 소켓 fd는 연결의 끝점을 식별합니다. 다른 호스트가 연결을 원할 경우 자체 호스트를 연결해야합니다. 당신은 당신에게 그것을 줄 수는 없습니다.

+0

이 답변을 선택한 이유를 알 수 없습니다. 물론 한 프로세스에서 다른 프로세스로 연결을 나타내는 파일 설명자를 전달할 수 있습니다. – user239558

+0

@ user239558 상위 프로세스에서 하위 프로세스에만 적용됩니다. – EJP

1

소켓에서 수신 대기중인 (수신 연결 허용) 마스터 서버가 있고 여러 작업자 프로세스가있는 경우 의미가 있습니다.

적합한/무료 작업자 (예 : 모든 작업자가 사용하는 TCP 연결 수를 기준으로)를 선택하고 들어오는 연결의 설명자를 마스터에서 작업자에게 전달할 수 있습니다. 이렇게하면 여러 근로자가 공통 엔드 포인트에서 청취 할 때 "번거로운 무리"를 피할 수 있습니다.

관련 문제