информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле ЛевинаСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Последний второй Python 
 Microsoft предупредила о двух незакрытых... 
 Перевод Firefox на DNS over HTTPS 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
В принципе проблема в том, что получив error_io_pending мы... 25.08.07 05:03  Число просмотров: 4865
Автор: void <Grebnev Valery> Статус: Elderman
<"чистая" ссылка>
>Что будет,
> если получить на клиенте не все данные, и закрыть пайп
> (убить процесс)? Я надеюсь что на сервере вернется ошибка
> на GetQueuedCompletionStatus с dwNumBytes == 0. Если так,
> то не вижу проблемы.

В принципе проблема в том, что получив ERROR_IO_PENDING мы не делаем различия между плохим и хорошим клиентом. Для обоих мы закрываем пайп на серверной стороне. Если от хорошего клиента (который не завершил чтение по уважительным причинам) появляется ошибка ERROR_IO_PENDING, то надо как-то попытаться подождать ещё чуток, пока не будет получена уведомление о completion. Пока не знаю, как это сделать просто. Но ты прав - самое простое и безопасное для сервера - это закрыть на сервере пайп клиента подчистив затем PER_OVERLAPPED_PERCLIENT данные.

> Я надеюсь что на сервере вернется ошибка
> на GetQueuedCompletionStatus с dwNumBytes == 0. Если так,
> то не вижу проблемы.

Это не так. GetQueuedCompletionStatus не вернётся в этом случае. И это как раз та проблема, из-за которой вся эта нитка постингов. Это потому, что GetQueuedCompletionStatus поджигается только по: или IO copmletion, или IOCP error, или WAIT_TIMEOUT.
Поэтому есть только один шанс - незавершённое клиентом чтение необходимо ловить сразу же по FALSE == Server->WriteFile() и затем по ERROR_IO_PENDING == GetLastError()

> Кстати, почему именно пайпы а не сокеты?

Не знаю... Число клиентов заведомо невелико. Всё только в локальной сети. И не будет ли легче в Windows domain обеспечить аутинтификацию клиента используя пайп? С сокетами - не придётся ли наворачивать поверх? Могу ошибаться.
<programming> Поиск 








Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2020 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach