2011-04-25 2 views
0

프로세스 간에는 msg를 통해 공유되는 소켓이 있습니다. 소켓을 사용하면 원격 연결 정보를 얻을 수 있습니다. 그러나 getpeername 결과는 0.0.0.0이며 아무런 오류가 없습니다.프로세스 사이에는 msg를 통해 공유되는 소켓이 있습니다. 소켓 getpeername 결과는 오류없이 0.0.0.0입니다.

심지어/proc/net/tcp를 점검했지만 연결이 없습니다.

여기 내 세부 구현입니다. 웹 서버에 대한

  1. , lighttpd를 recevie HTTP 연결
  2. 웹 서버 바이 패스
  3. 있는 fcgi 프로그램은 간단한 작업을 위해, (웹 서버) 소켓을 처리하는 과정에 수용 소켓을.
  4. 동시에 단계 3. 프로세스는

가 [상기 절차에서 단계 3 및 4를 동시에 작동 그러나 3 단계 간단한 웹 서버 hanle 기본 절차에서 공유 소켓을 받는다. 그래서 3 단계는 즉시 끝날 것이며, 그리고 웹 서버는 요청을 닫습니다. 그 후 4 단계 만 단독으로 작동합니다. ]

프로세스 (4 단계)에서 getpeername을 제외하고 다른 모든 소켓 기능은 정상적으로 작동합니다. select/send/recv와 같이

프로세스간에 공유 소켓에서 peername을 가져 오는 경우 제대로 작동하지 않습니까?

답변

0

AFAIK fcgis는 첫 번째 요청이 들어오지 않을 때 서버 시작시 생성됩니다. 따라서 fcgi로 전달 된 소켓을 원격 호스트에 연결할 수 없으므로 getpeername은 localhost와 다른 것을 반환 할 수 없습니다. http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S2.2getpeername이 fcgis에 대해 오류와 함께 반환됨을 나타냅니다.

질문에 답변이되지 않는 경우 몇 가지 코드를 제시해보십시오.

+0

그렇다면 빠른 cgi에서 피어 주소를 얻으려면 어떻게해야합니까? 다른 방법이 있습니까? 웹 서버 에서 피어 주소 정보를 얻은 다음 메시지 또는 파이프 전송을 사용하여 cgi로 전달하십시오. – agfe2

관련 문제