TCP/IP를 클라이언트로 사용하여 외부 장치와 통신하는 응용 프로그램을 만들었습니다. 통신을 위해 Synapse 라이브러리 (v40)를 사용하고 있습니다. 때로는 통신이 멈추는 경우가 있습니다. 나는 JclDebug로 콜 스택 (callstack)을 얻을 수 있었는데, 정의 된 타임 아웃에도 불구하고 패킷을받는 것이 문제였다.시냅스 TBlockSocket 가끔 동결
델파이 2009가 사용되었습니다.
이 문제를 해결하기위한 방법이 있습니까? 시냅스 버그?
[77297094] KiFastSystemCallRet
[006193FE] blcksock.TBlockSocket.InternalCanRead (Line 2741, "synapse\blcksock.pas")
[0061945C] blcksock.TBlockSocket.CanRead (Line 2764, "synapse\blcksock.pas")
[006185E5] blcksock.TBlockSocket.RecvPacket (Line 2324, "synapse\blcksock.pas")
[0061888F] blcksock.TBlockSocket.RecvTerminated (Line 2410, "synapse\blcksock.pas")
... my own code..
편집 : 블로킹 라인은 다음과 같습니다
x := synsock.Select(FSocket + 1, @FDSet, nil, nil, TimeVal);
선택 α- 함수는 Winsock2를 API에서입니다.
Edit2가 :
var
TimeVal: PTimeVal;
TimeV: TTimeVal;
..
TimeV.tv_usec := (Timeout mod 1000) * 1000;
TimeV.tv_sec := Timeout div 1000;
TimeVal := @TimeV;
if Timeout = -1 then
TimeVal := nil;
원본 소스 코드가 여기에 있습니다 : : http://synalist.svn.sourceforge.net/viewvc/synalist/trunk/blcksock.pas?revision=154&view=markup
사용 제한 시간이 1000
입니다 EDIT3 : 나는 두 가지를했습니다 timeval 형은 시냅스 코드에 의해 설정된다 두 개의 다른 호스트와 통신하기 위해 실행중인 클라이언트 스레드. 다른 사람이 교수형에 처하는 것처럼 보입니다. 신청서는 목요일부터 지금까지 운영 중입니다. Thread # 2는 5 시간 후에 중단되었지만 Thread # 1은 여전히 실행 중입니다.
'TimeVal'이 (가) 설정되는 것은 무엇입니까? –
@RemyLebeau 질문에 대한 추가 정보를 추가했습니다. – Harriv