Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Ошибка 10035 при запросе на HTTP сервер через WinSock [D7, WinXP]


Редиска   (27.01.18 17:51

Добрый день имеется вот такой код.
Проверка на открытый порт происходит успешно, а когда надо получить ответ то WinSock возвращает ошибку 10035.
Вообще задача получить не всю страницу, а достаточно только Headers.
В первую очередь важна скорость.


function TCheckerThread.CheckPort: Boolean;
var
 s, opt, BytesRead: Integer;
 FSocket: TSOCKET;
 addr: TSockAddr;
 hEvent: THandle;
 fset: TFDset;
 tv: TTimeval;
 Get, Response: string;
begin
 Result := false;

 addr.sin_family := AF_INET;
 addr.sin_addr.s_addr := INADDR_ANY;

 addr.sin_addr := IP;

 hEvent := WSACreateEvent();
 FSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);

 try
   if (FSocket = INVALID_SOCKET) then
   begin
     Result := True;
     Exit;
   end;

   WSAEventSelect(FSocket, hEvent, FD_WRITE + FD_CONNECT);

   addr.sin_port := Port;

   connect(FSocket, @addr, sizeof(addr));

   if (WSAGetLastError() = WSAEINPROGRESS) then
   begin
     Result := true;
     Exit;
   end;

   FD_Zero(fset);
   FD_SET(FSocket, fset);

   tv.tv_sec := 1;
   tv.tv_usec := 0;

   s := select(1, nil, @fset, nil, @tv);

   if (not FD_ISSET(FSocket, fset)) then
   begin
     Result := true;
     Exit;
   end;

   s := Sizeof(opt);
   opt := 1;

   getsockopt(FSocket, SOL_SOCKET, SO_ERROR, @opt, s);

   if (opt <> 0) then
   begin
     Result := true;
     Exit;
   end;

ToDebug('Port opened');

   Get := Format('GET / HTTP/1.1'#13#10 + 'Host: %s'#13#10 + 'User-Agent: %s'#13#10 + 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'#13#10 + 'Accept-Language: en-US,en;q=0.5'#13#10 + 'Accept-Encoding: gzip, deflate'#13#10 + 'Connection: keep-alive'#13#10 + #13#10, [IpStr, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0']);

   if Send(FSocket, PChar(Get)^, Length(Get), 0) = SOCKET_ERROR then
   begin
     Result := True;
     Exit;
   end;

   SetLength(Response, 65536);
   BytesRead := Recv(FSocket, PChar(Response)^, 65536, 0);

   case BytesRead of
     -1:
       ToDebug('Recv error: ' + IntToStr(WSAGetLastError));
     0:
       ToDebug('Connection closed by peer');
   else
     Response[BytesRead] := #0;
     ToDebug('Response: ' + Response);
   end;

 finally
   if closesocket(FSocket) <> 0 then
     ToDebug('Error closed socket');
   WSACloseEvent(hEvent);
 end;
end;


Styx ©   (28.01.18 01:34[1]

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

This error is returned from operations on nonblocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a nonfatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо