2013-05-08 4 views
12

私はSocketServerのドキュメントを見てきました。私はドキュメントからTCPサーバーコードをコピーして正常に動作します。私は問題を解決する方法に見えたSocketServer: '[Errno 98] Address already used in'を取り除く

socket.error: [Errno 98] Address already in use 

:しかし、私はいつでも私の端末でプログラムのうち、CTRL-c'edことに気づいてから、もう一度それを実行しようとした、私は次のようなエラーになるだろうthisおよびthisを読んでください。私はアドレスの再利用を許可するようにしようとする自分のコードに次の行を追加しました:

server.allow_reuse_address = True 

私はまだ上記の行を追加しさえして同じ問題を経験しています。私はtryexceptを私のserver.serve_forever()関数の周りに追加し、KeyboardInterrupt例外をキャッチし、アドレスが解放されることを期待してserver.shutdown()server.socket.close()を呼び出しました。ここで

は私のTCPサーバーコードの完全な範囲である

if __name__ == "__main__": 
    HOST, PORT = '', 9999 

    # Create the server, binding to localhost on port 9999 
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
    server.allow_reuse_address = True 

    # Activate the server; this will keep running until you 
    # interrupt the program with Ctrl-C 
    try: 
     server.serve_forever() 
    except KeyboardInterrupt: 
     server.shutdown() 
     server.socket.close() 

私はまだ上記のコードを実行し、エラーを取得してまで、分近く待たなければならないのです。(注:私はMyTCPHandlerクラスを除きます)アドレスは最終的に解放されます。これは、私がデバッグしてコードを絶えず変更している時に、イライラします。

私はこのコードを、Raspbian "Wheezy" 7.0を実行しているRaspberryPiでPython 2.7.3を使用して実行しています。

答えて

18
... 
SocketServer.TCPServer.allow_reuse_address = True 
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 
... 

allow_reuse_addressはインスタンスではなく、クラスに属している必要があります。

+0

これはうまくいった。ありがとう! –

関連する問題