Безопасно ли постоянно запускать server.accept () с сокетами? - PullRequest
0 голосов
/ 18 октября 2018

Прямо сейчас я создаю сервер-клиентскую программу с использованием TCP на Python с модулем сокетов.Посмотрев весь Интернет, стало очевидно, что в коде сервера требуется строка conn, addr = server.accept(), однако сервер не может узнать, когда клиент подключится.Это может быть от нескольких секунд до нескольких минут после запуска сервера.

Итак, мой вопрос таков: могу ли я использовать многопоточность для постоянного запуска строки кода server.accept(), чтобы любой клиент, который решил подключиться, мог?Или это может привести к злонамеренному подключению?

1 Ответ

0 голосов
/ 18 октября 2018

В соответствии с Может ли вызов «connect» при сокете успешно вернуться без вызова сервера «accept»? ,

TCP устанавливает соединение - трехстороннее рукопожатие - подпокрывает и помещает его в завершенную очередь соединений, когда он будет готов.Accept () возвращает следующее ожидающее соединение из передней части этой очереди.

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

Таким образом, вы не будете «пропускать» подключения, если не будете этого делать.Но accept() обычно все равно выполняется в бесконечном цикле - в основном потоке или иным образом - потому что это основная задача сервера по обслуживанию клиентов.

Согласно Потокобезопасен ли метод accept ()? , accept() является поточно-ориентированным, вы можете очень хорошо запустить его в отдельном потоке, или даже иметь несколько вызовов accept() в разных потоках (или даже разные процессы в ОС с fork) одновременно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...