• 締切済み

LWPでtimeoutがうまくいかない

LWPを使って外部と通信するプログラムを書きました。 通常時は希望通り動くのですが、相手のサーバが落ちている場合に エラーが戻るまで数分かかります。 ->timeoutの設定も入れたのですがききません。 URL先が落ちているときに、すばやくエラーが戻るようにしたいのですが、 どうしたらよいでしょうか? $server = "http://www.test.com"; $query{testid}="10"; $ua = new LWP::UserAgent; $ua->timeout(10); $request = POST($server, [%query]); $res = $ua->request($request); if (!$res->is_success) { print "Error\n"; exit 1; }

みんなの回答

回答No.1

TCPのコネクション待ちでは、LWPのタイムアウトは効きません。また、TCPコネクション後でも、サーバ側がレスポンスデータを小出しにチョロチョロ返す場合には、LWPのタイムアウトは効きません。 対策としては、LWPでALARMを掛けるか、LWPをやめてSocketレベルのプログラミングをするしかないようです。 前者は「LWP ALARM タイムアウト」、後者は「perl Socket タイムアウト connect」などで検索してやればネット上に情報があると思います。

yamaken4
質問者

お礼

LWPでALARMをかける方法で対処しました。 参考にして解決できました。 ありがとうございました。

関連するQ&A

専門家に質問してみよう