2012-06-07 4 views
0

외부 하드웨어 장치와 소켓을 통해 오디오 데이터를 교환하는 Delphi 6 응용 프로그램이 있습니다. 하드웨어 장치에는 내부 버퍼링 처리 속도가 느려지는 경우가 있는데, 특히 장시간 사용하면 오디오 스트림에 지장을 초래할 수 있습니다. 이것은 오디오 데이터가 종종 사람들 간의 양방향 실시간 대화의 기초가되기 때문에 중요한 문제입니다. 그러나 연결을 끊고 다시 설정하면 문제가 해결됩니다.Indy 9 소켓 연결이 실제로 끊어 졌는지 확인하는 방법이 있습니까 (Delphi 6 응용 프로그램)?

나는 Indy와 소켓을 연결/연결 해제하는 방법을 알고있다. 매우 쉽다. 내 관심사는 너무 빨리 다시 연결하려고하면 Indy 나 Windows 소켓 계층 자체에서 일부 연결 캐싱 메커니즘 자체가 내 연결을 끊을 수 있다는 것입니다. 외부 하드웨어 장치와의 소켓 연결이 실제로 끊어지는 것을 확인하는 방법이 있습니까? 더 나은 질문은, 내 재 연결 시도가 오래된 소켓 연결을 재사용하기보다는 새로운 새로운 소켓 (핸들?)을 생성하도록하는 방법이 있습니까?

새로운 하드웨어 장치는 내부 연결을 플러시하고 (장치의 소스 코드가 없기 때문에) 내 생각에 새 것으로 시작하기 때문에 새로운 연결이 생성 된 경우에만 "다시 설정"됩니다.

답변

3

인디가 즉시 다시 연결하는 것을 방지하지 않습니다. Windows가 그렇게하는 유일한 시간은 클라이언트가 매번 바인드 할 동일한 로컬 포트를 지정하는 경우입니다. 이 경우, Windows가 재사용을 위해 해당 포트를 릴리스 할 때까지 기다려야합니다. 소켓의 linger 옵션을 수동으로 설정하여 Windows의 지연과 해제를 즉시 해제 할 수 있습니다. 또는 로컬 포트를 지정하지 않고 각각의 (다시) 연결에 임의의 포트가 사용됩니다.

+0

다시 연결하는 것에 대해 걱정할 필요가 없습니다. 이전 소켓 핸들/연결이 "내 뒤에서"(또는 실제로 처음부터 부러지지 않았 음) 다시 사용되므로 걱정할 필요가 없습니다. 따라서 외부 연결을 끊으려고하는 하드웨어 장치가 연결 끊기 이벤트를 보지 못합니다. 외부 장치가 연결 끊기를 확인하고 따라서 이전 연결과 관련된 이전 데이터 구조를 삭제합니다. 이게 내가 걱정할 필요가있는거야? –

+4

이전 연결은 다시 사용되지 않습니다. –

관련 문제