Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 06.08.2013, 17:23   #1
MegabyteS
Новичок
 
Регистрация: 06.08.2013
Сообщений: 2
Репутация: 10
Вопрос проблема при вызове recv

Не получается найти проблему, может кто встречался с таким.
При получении ответа на http запрос на некой итерации (я заметил что должна быть последней итерацией) при вызове recv напрочь зависает выполнение, при этом я заметил размер последних не полученных данных меньше буфера, пока данные размером с буфер прекрастно читаются. В чем может быть загвоздка?

кусок кода :

repeat

FillChar(Buffer2,SizeOf(Buffer2),0) ;
d:=recv(Socket1,Buffer2,SizeOf(Buff er2),0);

for i:=0 to d do s:=s+Buffer2[i];

until d<=0;
MegabyteS вне форума   Ответить с цитированием
Старый 06.08.2013, 20:05   #2
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,957
Репутация: 6832
По умолчанию

Цитата:
Return Values

If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
Вывод: При проверке на полученный размер если он равен SOCKET_ERROR, нужно использовать функцию WSAGetLastError() для получения кода ошибки, и выяснения по этому коду причины.
__________________
I'm learning to live...
Stilet вне форума   Ответить с цитированием
Старый 07.08.2013, 14:26   #3
MegabyteS
Новичок
 
Регистрация: 06.08.2013
Сообщений: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вывод: При проверке на полученный размер если он равен SOCKET_ERROR, нужно использовать функцию WSAGetLastError() для получения кода ошибки, и выяснения по этому коду причины.
WSAGetLastError() выдает 0
SysErrorMessage(GetLastError) выдает "операция успешно завершена"


похоже на то, что сервер перестает отвечать после того как все выдает в сокет.

Последний раз редактировалось MegabyteS; 07.08.2013 в 14:43.
MegabyteS вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при вызове процедуры Emperator12 Общие вопросы Delphi 8 22.09.2012 00:52
Проблема с recv LostName C/C++ Сетевое программирование 3 17.01.2012 19:07
не хватает ОП при вызове imagecreatefromjpeg SkrudjMakdak PHP 5 10.08.2011 16:36
сервер-клиент, recv-send и проблема с передаваемыми символами. Ksardas13 Общие вопросы C/C++ 9 27.03.2011 20:49
Ошибка при вызове openFileDialog ---FISHER--- C# (си шарп) 7 02.03.2011 14:25


16:38.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru