Re[7]: Как отменить получение данных в асинхронном сокете
От: _Lion  
Дата: 17.02.05 09:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Еще раз, я уже отвечал ранее (самый первый ответ) — НЕЛЬЗЯ

А>либо закрыть сокет,
А>либо читать все что шлют,
А>либо использовать протокол передачи (application layer) с возможностью отмены, такой протокол должен передавать данные порциями с подтверждением на продолжение передачи. из готовых мне на ум ничего не приходит кроме, пожалуй, TFTP, однако он базируется на UDP. Хотя идея там именно такая — клиент запрашивает данные, сервер передает блок и ждет ответ — либо продолжать либо прекратить. В самом TCP используется подобная схема, с окнами перегрузки, отложенными подтверждениями итп, но воздействовать на этот уровень из usermode нельзя. Возможно как-то и можно через WSAIOCtl с кодом SIO_FLUSH но мне кажется это стрельба из пушки по воробьям, тем более что опять-таки такую отмену должен поддерживать сервер (и протокол), а в этом случае проще воспользоваться чисто протокольными средствами.
А>p.s. shutdown() нельзя отменить, уже если закрыл прием и/или передачу то это "навсегда"

И мне тогда совсем не понятен контекст использования функций:
WSACancelAsyncRequest
MSDN:The WSACancelAsyncRequest function cancels an incomplete asynchronous operation.

Хорошо расмотрим с другой стороны, допустим клиент отправил отмену серверу,как отменить текущую ассинхронную отправку данных по сокету,скажите это тоже не возможно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.