2

socket:connectが接続するIP /ポートを検索するのにかかる許容timeOut時間を短縮したいですか?IP 10.0.0.xを使用するNetgearのような一部のネットワークルーターでは、タイムアウトするのに1秒もかかりません。

注:「選択」は後で行われます

host = gethostbyname("xxx");//invalid IP, 

memcpy(&(sin.sin_addr), host->h_addr, host->h_length);
sin.sin_family = host->h_addrtype;
sin.sin_port = htons(4000);

s = socket(AF_INET, SOCK_STREAM, 0);
hConnect = connect(s, (struct sockaddr*)&sin, sizeof(sin));//sits here for 2 minutes before moving on to the next line of code

bConn = 0;// no connect
if (hConnect == 0) {
    bConn = 1;// connect made
}

どうも

4

2 に答える 2

3

を呼び出す前にソケットを非ブロッキングに設定してからconnect()select()またはpoll()を実行して、ソケットで発生しているイベントを確認します。

connect()注:この設定を使用すると、ゼロ以外のリターンが得られ、接続せずにリターンする場合errnoはに設定されますが、接続しようとしています。EINPROGRESSconnect()

詳細については、のマニュアルページのERRORSセクションを参照してください。connect()

于 2012-05-11T18:55:11.513 に答える
1

これを行う標準的な方法は、次の2つのステップです。

  1. connect()とO_NONBLOCK
  2. タイムアウトでselect()を使用する
于 2012-05-11T19:00:14.460 に答える