Здравствуйте, Аноним, Вы писали:
А>Еще раз, я уже отвечал ранее (самый первый ответ) — НЕЛЬЗЯ А>либо закрыть сокет, А>либо читать все что шлют, А>либо использовать протокол передачи (application layer) с возможностью отмены, такой протокол должен передавать данные порциями с подтверждением на продолжение передачи. из готовых мне на ум ничего не приходит кроме, пожалуй, TFTP, однако он базируется на UDP. Хотя идея там именно такая — клиент запрашивает данные, сервер передает блок и ждет ответ — либо продолжать либо прекратить. В самом TCP используется подобная схема, с окнами перегрузки, отложенными подтверждениями итп, но воздействовать на этот уровень из usermode нельзя. Возможно как-то и можно через WSAIOCtl с кодом SIO_FLUSH но мне кажется это стрельба из пушки по воробьям, тем более что опять-таки такую отмену должен поддерживать сервер (и протокол), а в этом случае проще воспользоваться чисто протокольными средствами. А>p.s. shutdown() нельзя отменить, уже если закрыл прием и/или передачу то это "навсегда"
И мне тогда совсем не понятен контекст использования функций:
WSACancelAsyncRequest
MSDN:The WSACancelAsyncRequest function cancels an incomplete asynchronous operation.
Хорошо расмотрим с другой стороны, допустим клиент отправил отмену серверу,как отменить текущую ассинхронную отправку данных по сокету,скажите это тоже не возможно?