C ++ в Windows: код GetLastError 998 при обмене именованными каналами - PullRequest
0 голосов
/ 23 февраля 2010

Я реализовал сервер именованных каналов, который взаимодействует с несколькими клиентами именованных каналов. Обычно это работает, но в некоторых случаях Клиент не сможет получить действительный результат из TransactNamedPipe. Возвращенный код GetLastError - 998 (недопустимый доступ к памяти). Что странно, потому что дескриптор, который я использовал для TransactNamedPipe, был действительным из CreateFile.

Я реализовал клиент для повторной попытки при обнаружении ошибки (если сервер канала не активен). Для других кодов ошибок (997, 230, 231) работает нормально. Но когда он обнаруживает код ошибки 998, независимо от того, сколько раз он повторяется, сервер именованных каналов не отвечает; в журналах сервера именованных каналов просто говорится, что клиент отключен, но обмен данными не проводился.

В чем может быть причина этого? Это потому, что клиентские запросы поступают из нескольких потоков, а сервер именованных каналов не может справиться с (почти) одновременными запросами? Я также реализовал «блокировки», чтобы предотвратить одновременные запросы от клиента к серверу именованных каналов, но ошибка все еще происходит.

Я искал в сети связь по именованным каналам с такой же проблемой, но пока результатов нет.

Заранее спасибо

1 Ответ

0 голосов
/ 24 февраля 2010

Это действительно странно. Я обновил до последней версии Windows SDK, указал на него свой проект, и без каких-либо изменений в коде он теперь работает отлично. Должно быть, это ошибка, которая уже исправлена. Я использовал библиотеки, поставляемые с VC ++ 9.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...