Winsock TCP Connect с бесконечным таймаутом - PullRequest
1 голос
/ 14 июля 2011

Я бы хотел, чтобы мой вызов Winsock TCP connect () блокировался с бесконечным таймаутом.

Вопросы: 1. Как я могу это сделать?

  1. С функциональной точки зрения мое желание, изложенное выше, как раз то, что мне нужно. Есть ли какая-то причина с технической точки зрения, что это будет плохой идеей?

Спасибо, Dave

Ответы [ 2 ]

4 голосов
/ 14 июля 2011

Если вы хотите ждать вечно, просто повторите попытку, если connect истекло.

Тайм-аут является фундаментальным для работы TCP.Вы можете настроить параметры своего компьютера (см., Например: Какой период времени TCP-подключения по умолчанию установлен в Windows? ), но это не очень хорошая идея (влияет на все TCP-подключения).

2 голосов
/ 14 июля 2011

Чтобы ответить на вторую часть вашего вопроса:

С функциональной точки зрения мое желание, изложенное выше, является именно Я нуждаюсь. Есть ли какая-то причина с технической точки зрения, это было бы плохая идея?

Вы можете обнаружить разницу между разорванным TCP-соединением и соединением, которое вам ничего не отправляет, написав ему (см. этот ответ ). Чтение ничего не может означать, что соединение разорвано или что вам ничего не отправляют. Тайм-ауты полезны для обнаружения (или форсирования) таких отключений, чтобы освободить ресурсы. (Вы также можете использовать TCP Keep-alive, чтобы обнаружить отключение, но эффект очень похож на тайм-аут.)

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

...