【发布时间】:2015-02-06 05:45:20
【问题描述】:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
any_connection = False
while True:
try:
conn, addr = s.accept()
data = conn.recv(1024)
any_connection = True
# keep looking
if not data: continue
pid = os.fork()
if pid == 0:
server_process(data, conn)
except KeyboardInterrupt:
break
if any_connection:
print("Closing connection")
conn.close()
我在我用 Python 编写的无限运行 TCP 服务器上捕获了KeyboardInterrupt信号。但是,即使我知道它正在关闭连接,因为它打印 Closing Connection,当我尝试重新运行服务器时,我得到:
OSError: [Errno 48] Address already in use
我不知道发生了什么,因为我确定我在打电话给conn.close()。
并且运行killall python3并没有修复它,除非我等待很长时间或更改端口,否则我会不断收到错误消息。我也尝试 grep 所有python3 进程,但我什么也没得到。
我正在运行 OS X Yosemite。
【问题讨论】:
-
您确定错误代码是 48 而不是 98?