SocketServerのエラー「socket.error: (98, 'Address already in use')」

pythonのSocketServerモジュールを使っていて、前回bindしたソケットは閉じているのに再実行時に以下のようにsocket.errorが発生した。

$ python -V
Python 2.4.3

$ python test_srv.py
server start
server close

$ python test_srv.py
Traceback (most recent call last):
  File "test_srv.py", line 48, in ?
    server = SocketServer.ThreadingTCPServer(('0.0.0.0', 12345), MyHandler)
  File "/usr/lib/python2.4/SocketServer.py", line 330, in __init__
    self.server_bind()
  File "/usr/lib/python2.4/SocketServer.py", line 341, in server_bind
    self.socket.bind(self.server_address)
  File "<string>", line 1, in bind
socket.error: (98, 'Address already in use')


これを回避するには、クラス変数allow_reuse_addressをTrueにするといいみたい。
※server_bind()の中で、socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)が実行されるようになる。

import SocketServer

class MyHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        '''リクエストを受けたときに実行する処理
        '''
        pass

if __name__ == '__main__':

    SocketServer.ThreadingTCPServer.allow_reuse_address = True
    server = SocketServer.ThreadingTCPServer(('0.0.0.0', 12345), MyHandler)
    try:
        print "server start"
        server.serve_forever()
    except KeyboardInterrupt, err: # Ctrl-Cで終了
        print "server close"
        server.server_close()

参考
Python ライブラリリファレンス SocketServer
サーバアプリケーションの作成 (TCP/SOCK_STREAM)