2011-03-31 2 views
1

activex exe에서 소켓 통신을 캡슐화하고 있습니다.소켓 연결 요청에 문제가 있습니다.

이 소켓 객체는 클라이언트 응용 프로그램에서 생성되며 클라이언트에 이벤트 알림을 제공합니다.

ConnectionRequest 이벤트가 발생하면 연결이 수락되고 CONNECTED (소켓 개체에 정의 됨) 이벤트를 통해 클라이언트에 알립니다. 모든 것이 현재까지 작동하지만 ConnectionRequest는 Accept 메소드를 통해 이전 연결을 수락 한 후에 다시 SAME RequestId로 발생합니다.

소켓을 닫고 요청을 다시 시도하면 런타임 오류가 발생합니다. "런타임 오류 10038, 설명자가 소켓이 아닙니다"!

누구에게이 문제가 발생 했습니까? 해결 방법을 제안하십시오.

미리 감사드립니다.

추 신 : TCP 프로토콜을 사용 중입니다.

답변

0

은 내가 requestID 값이 수신 상태를 의 소켓의 소켓 기술자입니다 확신 해요, 그래서 당신이 (가장 일반적입니다) 한 청취자가 때 변화하지 않는 의미가 있습니다.

이것은 프로세스 기준이므로 의미있는 방식으로 프로세스간에 전달할 수는 없습니다. 이를 수행하려면 아마도 WSADuplicateSocket() 함수를 호출해야합니다. 나는 이것을 시도한 적이 없으므로 실험 해 볼 수도 있습니다.하지만 ConnectionRequest 핸들러가 Winsock 컨트롤이 거부를 보내는 요청을 수락하지 않고 종료 할 때 나는 믿습니다.

+0

유형의 requestID는 winsock의 인터페이스 정의에 따라 길다. – ramu

+0

예,하지만 상황은 그보다 조금 더 복잡합니다. 값은 일반적으로 한 프로세스 내에서만 의미가 있습니다. MSDN 기사를 읽으십시오. – Bob77