Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка WSARECV, WSAENOBUFS 
:(
    Опции темы
Lexicss
Дата 14.9.2010, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Доброго времени суток.
С клиента подключаюсь к серверу. Соединение проходит, начинаю обмен и спустя 5-10 секунд на клиенте функция WSARecv выдаёт ошибку WSAENOBUFS(10055).  Вся работа с сокетами асинхронная.
описание ошибки: No buffer space available (Закончились буферы). Невозможно осуществить операцию с сокетом, поскольку системе не хватает буферного пространства или переполнена очередь. Это означает, что WinSock временно не хватает буфров. Это не должно вызывать проблем, если не продолжается долгое время.

Пробывал по возникновению этой ошибки повторно вызывать WSARecv - ошибка повторяется. Увеличивал буффер приёма сокета с 8-ми до 64 кБ - тоже не помогает. 
На клиенте стоит Win 2000 Server.
Почему такое возникает и как решить эту проблему?


Это сообщение отредактировал(а) Lexicss - 14.9.2010, 14:53
--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
Alca
Дата 14.9.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50



Раздевайтесь, больной! Код показать не судьба?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Lexicss
Дата 14.9.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Код

  function cRecv(boNew : boolean) : integer;
  var
    cnt, Flags : cardinal;
  begin
    if boNew //íîâûé ïðèåì
    then begin
      RecvCount := 0;
      RecvLen := 0;
    end;

    Flags := 0;
    Result := WSARecv(Sock, @RecvBuf, 1, cnt, Flags, @Recv_Ovp, nil);

    if Result <> 0
    then begin
      LanLastError := WSAGetLastError;
      if (LanLastError <> WSA_IO_PENDING)
      then begin  
        PostMessage(RAForm.Handle,wm_TraceProc,LanLastError,225);
        PutErr('Îøèáêà ïðè¸ìà(cRecv): ' + IntToStr(LanLastError));
        Result := CONNECT_ERROR;
        cSetLanState(stLan_ERecv);
        //cLanReset;
        Exit;
      end
      else begin  
        Result := 0;
      end;
    end;

  end; //cRecv

Result = -1, LanLastError = 10055;

Добавлено @ 15:43
переменная RecvBuf предварительно установлена:
Код

var   Buf                : array[0..65535-1] of byte;

   .....
  RecvBuf.len := 65535;
  RecvBuf.buf := @Buf;


Добавлено @ 15:47
Два года прога работает адекватно, именно на одном компьютере повела неожиданно, функция WSARecv выдаёт WSAENOBUFS.  
Т.е. пытаюсь выяснить что ещё предусмотреть чтобы обойти ситуацию с этой ошибкой и соединение не обрывалось.  smile 

Это сообщение отредактировал(а) Lexicss - 14.9.2010, 15:47
--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1049 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.