2010-02-23 4 views
0

여러 명명 된 파이프 클라이언트와 통신하는 명명 된 파이프 서버를 구현했습니다. 일반적으로 작동하지만 일부 인스턴스에서는 클라이언트가 TransactNamedPipe에서 유효한 결과를 얻을 수 없습니다. 반환 된 GetLastError 코드는 998 (잘못된 메모리 액세스)입니다. TransactNamedPipe에 사용 된 핸들이 CreateFile에서 유효했기 때문에 어느 것이 이상합니다.Windows의 C++ : 명명 된 파이프 통신 중 GetLastError 코드 998

나는 파이프 서버가 살아 있지 않다면 오류를 발견했을 때 다시 시도하기 위해 클라이언트를 구현했다. 다른 오류 코드 (997, 230, 231)의 경우 제대로 작동합니다. 그러나 오류 코드 998이 몇 번이나 재 시도 되더라도 명명 된 파이프 서버는 응답하지 않습니다. 명명 된 파이프 서버 로그에서 클라이언트가 연결이 끊어 졌음을 나타내지 만 데이터 교환은 없었습니다.

왜 이런 이유가있을 수 있습니까? 클라이언트 요청이 여러 스레드에서오고 명명 된 파이프 서버가 (거의) 동시 요청에 대처할 수 없기 때문입니까? 또한 클라이언트에서 명명 된 파이프 서버로의 동시 요청을 방지하기 위해 "잠금"을 구현했지만 여전히 오류가 발생합니다.

이 비슷한 문제로 명명 된 파이프 통신을 웹에서 검색했지만 지금까지 결과가 없습니다.

미리 감사드립니다.

답변

0

정말 이상합니다. 최신 Windows SDK로 업데이트하고 프로젝트를 지적했으며 코드를 변경하지 않고도 완벽하게 작동합니다. 이미 수정 된 버그 였을 것입니다. VC++ 9.0과 함께 제공되는 라이브러리를 사용하고있었습니다.

관련 문제