информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsГде водятся OGRыСетевые кракеры и правда о деле Левина
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
recv() ? 24.07.02 10:35  Число просмотров: 912
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть подозрение на это место:

> while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0)) >
> -1 ) {
> анализируем полученное
> }
>

recv может возвращать и ноль (при нормальном закрытии соединения с другой стороны) - этот случай обрабатывается?
<programming>
[C++] Как отлавливать дохлые сокеты 24.07.02 04:02  
Автор: [H] Статус: Незарегистрированный пользователь
<"чистая" ссылка>

написал тут класик mconnection принцип работы вот:

mconnection::mconnection(...) {
создаем поток в который в кач. параметра передаем ссылку "на это"=) - на себя
hThread=CreateThread (NULL, 0, ConnectionThreadFunc, this, 0, &ThreadId);
}

воть

DWORD APIENTRY ConnectionThreadFunc(void* lpParam) {
- назначение которой читать параметр обьекта lPParam (мы туда кинули ссылку на это) .Socket

#def lpc (mconnection*)lpParam
- okay воть:

while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0)) > -1 ) {
анализируем полученное
}

закрываем
delete(lpc);

#undef..

и деструктор
mconnection::~mconnection() {
закрываем сокет
шут сокет
клозесокет сокет
}


дело все в том что иногда потоки зависают на recv и не удаляются когда клиенты вроде как отключились(программа-клиент закрылась). в качестве клиентов использовались FTP-клиент "встроенный" в IE и несколько других....

помоему PING не решение проблемы....да и как, если отправка/прием байта может логически все испортиль
да и тайм-аут-проки тоже не хочется вводить
да. и взаимосвязь с WNDPROC'ами тоже не хочется вводить.мне эта концепция не нравится (может там таких трабл и нет.)

как быть?
recv() ? 24.07.02 10:35  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Есть подозрение на это место:

> while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0)) >
> -1 ) {
> анализируем полученное
> }
>

recv может возвращать и ноль (при нормальном закрытии соединения с другой стороны) - этот случай обрабатывается?
да не в этом дело.....тут что то принципиальное 25.07.02 02:38  
Автор: [H] Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Есть подозрение на это место:
>
> > while (( rc=recv(lpc->Socket,buf,MAX_BUF_LEN, 0))
> >
> > -1 ) {
> > анализируем полученное
> > }
> >
>
> recv может возвращать и ноль (при нормальном закрытии
> соединения с другой стороны) - этот случай обрабатывается?

да случай ноль обрабытывается внутри стоит
....
switch (rc) {
case 0:
goto closethread; // там закрываются сокет
....

при нормальных та все пашет....а при экстремальных нагрузоках и большомо пинге поток иногда не закрывается..
1




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


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