2010-02-28 139 views
3

我正在使用Python中的套接字,并且正处于开发阶段,我需要频繁地终止并重新启动我的程序。Socket关闭和重新绑定 - 如何避免漫长的等待?

问题是,一旦我的python脚本死亡,我必须等待很长时间才能重新绑定侦听套接字。这里有一个片段重现该问题:

#!/usr/bin/env python3               

import socket 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((socket.gethostname(), 4321)) 
try: 
    s.listen(5) 
    while True: 
     (a, b) = s.accept() 
     print(a.recv(1000)) 
except KeyboardInterrupt: 
    print("Closing") 
    s.shutdown(socket.SHUT_RDWR) 
    s.close() 

击中C-¼的运行,除了代码,调用shutdownclose功能,但我不能重新启动我的程序,直至插槽超时(GNU/Linux环境)。

我该如何避免这种情况?

回答

4

我不知道如何在Python中做到这一点,但你想设置SO_REUSEADDR套接字选项。

+2

S = socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) s.bind((socket.gethostname(),4321)) 即作品。哥们,谢啦! – 2010-02-28 15:26:35