Хотя вопрос довольно старый, и я согласен с тем, что вложенность формы не допускается в HTML
. Но это все, что угодно, возможно, захочет увидеть это
, где вы (я называю это взломом, так как я уверен, что это не является законным) html, чтобы браузер имел вложенную форму
JS FIDDLE LINK
Путем установки тайм-аута на сокете, 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
параметр.