2016-04-08 10 views
0

web.pyを使用しているPythonサーバーでは、SSLEOFErrorがかなり頻繁に発生しているApple Push Notification Serverとの通信があります。私はこのエラーを処理しようとしましたが、私はsslモジュールまたはpyopensslまたは_sslで見つけることができません。このエラーを処理したり、おそらくそれを防ぐのに役立つと大変感謝しています。スタックトレースは次のとおりです。SSLEOFErrorの再処理

Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 239, in process 
    return self.handle() 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 230, in handle 
    return self._delegate(fn, self.fvars, args) 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 420, in _delegate 
    return handle_class(cls) 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 396, in handle_class 
return tocall(*args) 
    File "/home/ubuntu/mdm-server/server/API/api.py", line 189, in GET 
    COMMAND_QUEUE.get_queue(sql) 
    File "/home/ubuntu/mdm-server/server/queue.py", line 165, in get_queue 
    self.send_apns(row['udid'], sql) 
    File "/home/ubuntu/mdm-server/server/queue.py", line 219, in send_apns 
    except ssl.SSLEOFError: 
AttributeError: 'module' object has no attribute 'SSLEOFError' 

EDIT:ここではエラー処理が悪いスタックトレースがあります。私はおそらく、ssl.SSLEOFERRORの代わりにスーパークラスssl.SSLERRORを扱うべきであることを理解していますが、これを試してみるつもりですが、なぜこれが起こったのかについての洞察は非常に高く評価されます。

Unexpected error: <class 'ssl.SSLError'> 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 239, in process 
    return self.handle() 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 230, in handle 
    return self._delegate(fn, self.fvars, args) 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 420, in _delegate 
    return handle_class(cls) 
    File "/usr/lib/python2.7/dist-packages/web/application.py", line 396, in handle_class 
    return tocall(*args) 
    File "/home/ubuntu/mdm-server/server/API/api.py", line 189, in GET 
    COMMAND_QUEUE.get_queue(sql) 
    File "/home/ubuntu/mdm-server/server/queue.py", line 165, in get_queue 
    self.send_apns(row['udid'], sql) 
    File "/home/ubuntu/mdm-server/server/queue.py", line 216, in send_apns 
    wrapper.notify() 
    File "/usr/local/lib/python2.7/dist-packages/APNSWrapper-0.6.1-py2.7.egg/APNSWrapper/notifications.py", line 194, in notify 
    apnsConnection.connect(apnsHost, self.apnsPort) 
    File "/usr/local/lib/python2.7/dist-packages/APNSWrapper-0.6.1-py2.7.egg/APNSWrapper/connection.py", line 215, in connect 
    self.context().connect(host, port) 
    File "/usr/local/lib/python2.7/dist-packages/APNSWrapper-0.6.1-py2.7.egg/APNSWrapper/connection.py", line 161, in connect 
    self.connectionContext.connect((host, port)) 
    File "/usr/lib/python2.7/ssl.py", line 433, in connect 
    self._real_connect(addr, False) 
    File "/usr/lib/python2.7/ssl.py", line 423, in _real_connect 
    self.do_handshake() 
    File "/usr/lib/python2.7/ssl.py", line 405, in do_handshake 
    self._sslobj.do_handshake() 
SSLError: [Errno 8] _ssl.c:510: EOF occurred in violation of protocol 

Edit2:ssl.SSLErrorがエラーを処理します。

Edit3:このGitHubリポジトリの「サーバー設定」セクションで詳しく説明しているように、APNSWrapperを編集してTLSv1を使用する必要がありました。 Example iOS MDM Server

答えて

0

申し訳ありません。 APNサーバーが目的の電話と通信できない場合、APNSWrapperはこのエラーをスローします。 (I.E.電話が切れている、または受信していない)誰かがこの問題に遭遇した場合、ssl.SSLErrorを捕まえるtry/exceptブロックがこの例外を処理します。このような場合には、APNへの別のコールを少し待つことをお勧めします。

関連する問題