Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > AcceptSecurityContext, определить размер данных


Автор: GremlinProg 17.8.2012, 10:38
Дано: имеется клиент-сервер, с защищенным соединением,

иногда стадия инициализации защищенного соединения склеивается со штатной работой сервиса,
т.е. в буфере клиентского сокета на стороне сервера могут содержаться одновременно и последняя порция данных инициализации SSL и обычные данные клиента,

на сервере, в AcceptSecurityContext передается весь блок пришедших данных (параметр pInput->pBuffers->pvBuffer), т.к. размер запрашиваемой порции изначально неизвестен, известен только максимальный размер такого пакета ( SecPkgInfo::cbMaxToken )

Проблема: когда AcceptSecurityContext на сервере успешно завершает инициализацию и переходит в штатный режим, клиент, пославший склеенный первый блок данных висит, т.к. сервер проглотил этот блок при завершении инициализации и ничего не ответил

чтобы решить проблему можно просто считывать данные на стадии инициализации побайтно, но это медленно,
а если определить размер переваренного блока инициализации ( т.е. число байт, обработанных AcceptSecurityContext во входящем буфере pInput->pBuffers->pvBuffer  ), решение будет быстрым

кто-нибудь сталкивался с проблемой?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)