Как отменить RIOReceiveEx
От: 3m-soft  
Дата: 10.05.16 11:19
Оценка:
Как отменить RIOReceiveEx на UDP сокете?
В MSDN написано, что отменить можно при помощи WSAIoctl(SIO_FLUSH).
У меня WSAIoctl завершается с ошибкой WSAEFAULT.
Сейчас для отмены закрываю сокет через closesocket, но это нехороший вариант.
Отредактировано 10.05.2016 11:20 3m-soft . Предыдущая версия .
Re: Как отменить RIOReceiveEx
От: Pzz Россия https://github.com/alexpevzner
Дата: 10.05.16 11:29
Оценка:
Здравствуйте, 3m-soft, Вы писали:

3S>Как отменить RIOReceiveEx на UDP сокете?

3S>В MSDN написано, что отменить можно при помощи WSAIoctl(SIO_FLUSH).
3S>У меня WSAIoctl завершается с ошибкой WSAEFAULT.
3S>Сейчас для отмены закрываю сокет через closesocket, но это нехороший вариант.

Ошибка WSAEFAULT говорит о том, что вы где-то Ioctl'у невалидный указатель передали (или выходной буфер слишком маленький). Соответственно, проверьте внимательно параметры Ioctl'а.
Re[2]: Как отменить RIOReceiveEx
От: 3m-soft  
Дата: 10.05.16 17:16
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Ошибка WSAEFAULT говорит о том, что вы где-то Ioctl'у невалидный указатель передали (или выходной буфер слишком маленький). Соответственно, проверьте внимательно параметры Ioctl'а.


Это понятно. Вызываю так: WSAIoctl(S, SIO_FLUSH, nullptr, 0, nullptr, 0, nullptr, nullptr, nullptr);

Из MSDN:
SIO_FLUSH — Discards current contents of the sending queue associated with this socket. No input and output buffers are required. The WSAENOPROTOOPT error code is indicated for service providers that do not support this IOCTL.

Я пробовал передавать буферы, получаю другую ошибку — WSAEOPNOTSUPP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.