Я использую Perl (который, надеюсь, ни на что не повлияет), но мне нужно знать, как установить тайм-аут для операции подключения. Проблема в том, что я не могу ждать вечно, чтобы произошла операция подключения. Если это не произойдет в течение нескольких секунд, я бы предпочел сдаться и идти дальше.
socket(my $sock, PF_INET, SOCK_STREAM, (getprotobyname('tcp'))[2]);
setsockopt($sock, SOL_SOCKET, SO_SNDTIMEO, 10); # send timeout
print "connecting...\n";
connect($sock, sockaddr_in(80,scalar gethostbyname('lossy.host.com')));
print "connected...\n";
Проблема в том, что, если соединение с «lossy.host.com» является «потерянным» или медленным или что-то иное, но быстрое, я бы скорее сдался, чем заставил пользователя ждать. (Думайте об этом как о побочном эффекте для программы, которая делает что-то еще ... пользователь, вероятно, не ожидает, что этот скрипт будет где-то взаимодействовать с сервером ...).
Threading Case: как бы вы прервали соединение ()? Вы бы просто отсоединили нить и забыли об этом?