Есть ли способ сократить время ожидания connect_ex ()?

Хотя вопрос довольно старый, и я согласен с тем, что вложенность формы не допускается в HTML

. Но это все, что угодно, возможно, захочет увидеть это

, где вы (я называю это взломом, так как я уверен, что это не является законным) html, чтобы браузер имел вложенную форму




JS FIDDLE LINK

http://jsfiddle.net/nzkEw/10/

0
задан Garrett 25 June 2019 в 19:16
поделиться

1 ответ

Путем установки тайм-аута на сокете, socket.connect_ex() становится неблокирование операция. Именно поэтому Вы добираетесь EAGAIN и EALREADY, ошибки при вызове connect_ex() неоднократно в цикл - EAGAIN на первом вызове указывают, что соединение не может быть сразу завершено и происходит в фоновом режиме, и затем EALREADY на последующих вызовах указывает, что существующее соединение все еще происходит и еще не завершилось.

Ваш цикл просто работает, пока соединение наконец не заканчивается успешностью или неуспешностью, неважно, сколько времени это берет. Тайм-аут сокета, который Вы устанавливаете, не играет в ту логику.

, Чтобы сделать, что Вы просите, выполняет Ваш собственный таймер параллельно к циклу соединения и затем закрывают сокет, если таймер протекает прежде socket.connect_ex() возвраты его конечный результат.

, С другой стороны, избавляются от цикла в целом.

Вызов socket.connect_ex() одно время, и если это возвращается EAGAIN затем использование select.select() для ожидания соединения для завершения. Это имеет timeout параметр. Сокет TCP введет перезаписываемое состояние, если незаконченная попытка подключения успешно соединится с сервером. Если select() испытывает таймаут или сообщает об ошибке, закройте сокет вместо этого.

Или, попытайтесь использовать socket.create_connection(), который также имеет timeout параметр.

1
ответ дан Remy Lebeau 25 June 2019 в 19:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: