質問: check_status('https://www.hoge.com/') print("access status:", status) if status != 200: print("access error.") # 疎通失敗時のアクション ``` ### 発生している問題・エラーメッセージ ``` access status:-1 ``` ### 補足情報(FW/ツールのバージョンなど) 環境 Windows 7 professional 32bit, Python 3.6.4 32bit
回答: ~~コード上は問題が無いように見受けられます。~~ 例外発生時に問題があるみたいなので、訂正線を追加 > > urlopen error [WinError 10055] > > > WinSockエラー `10055`なので考えられる原因は3点あります。 1,`MaxUserPort`の設定を行っていなく、使用可能なポートが枯渇した。 ■参考情報 5000 を超える番号の TCP ポートから接続しようとすると 'WSAENOBUFS (10055)' エラーが表示される 2,ファイアウォールやアンチウィルスソフトのバグによるポート枯渇。 OFFにしてもよいなら、危険ですが一度試してみてくださいな。 3,32bit OSなためシステムのリソース不足 64bit OSで試してみてくださいな。 ■参考情報 Windows ソケットのエラー コード、値、および意味] あとは`netstat -anop tcp 3` でポートが`CLOSE_WAIT`状態になっているのかの確認ぐらいでしょうか。 2018/02/14追記 少し気になって調べてみましたが、urllib.request.urlopenはHTTP 1.1のKeep-Alive接続をサポートしないみたいですね。 > > urllib.request モジュールは HTTP/1.1 を使用し、その HTTP リクエストに Connection:close ヘッダーを含みます。 > > > よって接続するたびに新規ソケットが生成されるとのこと。 ``` with urllib.request.urlopen(url, timeout=10) as response: # response ヘッダーを表示 # ('Connection', 'close')が表示されると思います。 print(response.getheaders()) return response.code ```