如何解决每个请求两个连接
对于以下代码,每次我连接到服务器时,每个浏览器请求都会看到两个连接。有什么问题以及如何解决?
$ sudo python3 host.py
Connected by ('127.0.0.1',60810)
Connected by ('127.0.0.1',60812)
浏览器:
http:// localhost:65432 /
host.py:
#!/usr/bin/env python3
import socket
HOST = '127.0.0.1' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:
s.bind((HOST,PORT))
s.listen()
while True:
conn,addr = s.accept()
with conn:
print('Connected by',addr)
data = conn.recv(1024)
conn.sendall(data)
此外,每次我按^ C并再次运行该脚本时,我都会得到
Traceback (most recent call last):
File "host.py",line 9,in <module>
s.bind((HOST,PORT))
OSError: [Errno 98] Address already in use
一分钟,并且在此期间无法连接。看起来像超时。
解决方法
您的浏览器尝试多次连接,这就是您看到的两个连接。
在拥有进程关闭后,系统将使绑定端口保持打开状态一段时间。如果您尝试在这段时间内再次绑定到同一端口,则会收到已经使用的地址。您可以设置SO_REUSEADDR
标志以便能够立即重用该端口:
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
注意:只要端口号大于1024,就无需使用sudo
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。