2011-08-31 2 views
1

우리는 Delphi Indy (SVN 트렁크) 클라이언트와 mod_php가있는 Apache를 실험 해 왔습니다. shutdown 함수를 등록하는 PHP 스크립트가 호출됩니다.Delphi의 Indy 클라이언트에서 TCP RST를 보낼 수 있습니까?

테스트 중에이 종료 기능은 스크립트가 종료되고 connection_status()이 0이 될 때만 호출됩니다.

스크립트를 실행하는 동안 CURL을 사용하고 Ctrl-C를 누르면 CURL은 RST 플래그가 부울 true로 설정된 TCP 패킷을 전송합니다. 이것은 셧다운 기능을 유발하고 connection_status()이 다시 돌아옵니다. 연결 시간이 초과되면 TCP FIN 플래그가 켜지지만 종료 기능이 트리거되지 않습니다. 실제로 PHP 스크립트 실행이 끝날 때까지 Apache 프로세스가 CLOSE_WAIT에 들어갑니다. 인디를 사용하면 설정되는 유일한 플래그는 FIN입니다.

Indy는 RST 플래그가 true로 설정된 TCP 패킷을 보내도록 할 수 있습니까? 연결 시간이 초과 될 때이 작업을 수행하려고합니다 (테스트 할 문제 해결).

http://uk.php.net/connection_handling

답변

0

인디 항상 RST 플래그를 보낼 것이다, 정상적으로 연결을 종료하려고 참조하십시오. 필요한 경우 연결을 강제로 종료해야합니다.

+0

우리의 경우에는 타임 아웃이 발생합니다. 이것은 Exception으로 처리됩니다. 우리가 할 수있는 일을 우리에게 말해 줄 수 있습니까? 나는 그가 연결이 이미 잃어 버렸다고 믿는 타임 아웃을 처리하는 시점에서 우리 애플 리케이션을 쓴 사람에 의해 들었다. – jmkgreen

+0

시간 초과는 시간 초과입니다. Indy는 자체적으로 시간 초과로 인해 연결을 닫지 않습니다. 상대방이 인디가 즉시 연결 해제를 감지하지 못하게하는 비정상적인 방식으로 상대방의 연결을 닫을 수 있으며 이로 인해 시간 초과가 발생할 수 있습니다. –

+0

다른 쪽이 계속 실행됩니다. 실제로 테스트에서는 클라이언트에 계속 데이터를 보냅니다. 우리는 분명히 뭔가를 놓치고 있습니다. 나는 우리 남자에게 더 자세히 살펴보고 좀 더 간결한 질문을 해줄 것을 요청할 것이다. – jmkgreen

관련 문제