Перейти к содержимому

Фотография

Web/HTTP: ошибки Socket'ов и WinInet'a


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 Сэм

Сэм

    Постоянный участник

  • Members
  • PipPipPip
  • 212 сообщений
  • ФИО:Сергей Минаев
  • Город:Москва


Отправлено 05 августа 2011 - 06:03

Коллеги, доброго всем!

Столкнулся, как водится, с редкой, судя по гуглу, ситуацией.
Есть стандартное web-приложение под браузер, ходит через HTTPS. Оно работает вручную, записывается, но при воспроизведении при первом же запросе валится сокетная ошибка:

t=3896ms: Connecting to host 10.***.***.61:443 
t=3918ms: Connected socket from 127.0.0.1:26381 to 10.***.***.61:443 in 19 ms  
BIO[01B93D70]:write(1132,69) - socket fd=1132
BIO[01B93D70]:write return 69
BIO[01B93D70]:read(1132,7) - socket fd=1132
BIO[01B93D70]:read return 7
Error -27778: SSL protocol error when attempting to connect with host "my_server_name"  
BIO[01B93D70]:Free - socket
t=3998ms: Closed connection to my_server_name:443 after completing 0 requests 

Пытался делать различные настройки web_set_sockets_option(), web_set_option(), web_set_max_retries() - не дает эффекта.

Погуглил. В редких случаях, где дают советы, рекомендуют перейти с режима Sockets на WinInet.
Попробовал. И правда, заработало! Но теперь другая печаль: уже в середине скрипта на определенном запросе (возможно, он более тяжелый, чем другие, дольше время отклика) падает такая ошибка:

Error -27492: "HttpSendRequest" failed, Windows error code=12002 and retry limit (5) exceeded for URL="https://my_server_name/url"

Опять же поигрался с настройками (добавил кол-во попыток до 5, все равно падает), эффекта нет.
Погуглил опять. И по иронии судьбы теперь советуют выключить режим WinInet!!!


Вот и вопрос: сталкивался кто-нибудь с этой проблемой?
Меня устроило бы решение в рамках любого из режимов (sockets, wininet), хотя, конечно, socketы лучше :)

Буду благодарен за помощь!
  • 0

#2 Сэм

Сэм

    Постоянный участник

  • Members
  • PipPipPip
  • 212 сообщений
  • ФИО:Сергей Минаев
  • Город:Москва


Отправлено 05 августа 2011 - 09:39

Опытным путем установил, что в режиме WinInet падают с ошибкой те запросы, которые не отвечают дольше 30сек.
Полагаю, что это установленный таймаут на ожидание респонза на уровне Wininet.
Знает ли кто-нибудь, как можно увеличить это время ожидания?
  • 0

#3 Сэм

Сэм

    Постоянный участник

  • Members
  • PipPipPip
  • 212 сообщений
  • ФИО:Сергей Минаев
  • Город:Москва


Отправлено 29 августа 2011 - 06:20

Как всегда, напишу здесь найденное решение, чтоб самому не забыть :)

  • К счастью, проблема решилась в рамках режима Sockets. Ошибку вызывал некорректный серверный сертификат: он был не предназначен для шифрования, только для цифровой подписи :) И если IE просто выдавал предупреждение о плохом сертификате (а плохой он был в принципе, т.к. создавался для ПРОД сервера, а не тестового), то LR честно валил socket error. Другое дело, что не было возможности никак получить точную причину этой ошибки...
  • Проблема в рамках режима WinInet так и не была решена: я нигде не нашел настроек таймаута на ожидание отклика от сервера... Если кто-то найдет решение - напишите в тему, плиз, будет кому-нибудь польза :)

  • 0

#4 drwoland

drwoland

    Новый участник

  • Members
  • Pip
  • 2 сообщений
  • ФИО:Рожков Олег Владимирович


Отправлено 23 декабря 2011 - 10:42

Проблема в рамках режима WinInet так и не была решена: я нигде не нашел настроек таймаута на ожидание отклика от сервера... Если кто-то найдет решение - напишите в тему, плиз, будет кому-нибудь польза :)


Вот одно из решений:

В реестре, в ветке HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings
нужно создать параметр ReceiveTimeout типа dword со значением ТаймаутСек*1000 (60000 для таймаута в минуту).
После чего перезагрузить компьютер.
  • 0

#5 Stren

Stren

    Активный участник

  • Members
  • PipPip
  • 129 сообщений
  • ФИО:Буланов Алексей Александрович
  • Город:Москва

Отправлено 25 июня 2013 - 10:11

я нигде не нашел настроек таймаута на ожидание отклика от сервера... Если кто-то найдет решение - напишите в тему, плиз, будет кому-нибудь польза :)

Example: lrs_set_recv_timeout2

In the following example, lrs_set_recv_timeout specifies a timeout of 120 seconds for a login procedure. Once the connection is established, the data streams at a quicker rate. The lrs_recv_timeout2 function sets the timeout for subsequent iterations to 10 seconds.

lrs_create_socket("socket2", "TCP", "RemoteHost=tears.mercury.co.il:23", LrsLastArg);

lrs_send("socket2", "buf2", LrsLastArg);

lrs_set_recv_timeout(120,0);

lrs_set_recv_timeout2(10,0);

lrs_receive("socket2", "buf3", LrsLastArg);




  • 0
С уважением Алексей ака Stren, подробнее в профайле.


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных