如何在 `kill PID` 后将套接字服务器从 "busy" 状态中删除?
How to remove the socket server from "busy" state after `kill PID`?
我有一个简单的套接字服务器设置,可以将一些数字发送到 Intranet 中的客户端。在测试时,我从终端 (CTRL+C) 停止了 server.py
脚本,这后来在我尝试时导致 Safari 中的繁忙服务器错误到达同一页。
我看到了这个serverfault question但是问题是:
我找不到 /etc/init.d/networking restart
文件。我正在使用 Mac,这是用于 Linux。每次我测试我的服务器时,这也太过分了。至少每小时10次。
在代码中插入选项 SO_REUSEADDR
确实有所帮助 Address already in use
但我认为我的服务器已启动但处于繁忙状态。使用答案 here,我将 代码 编辑为:
host = <my machine address>
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 8080
s.bind((host, port))
我对我的服务器进行了哪些更改以消除 Safari 中的此错误?
Safari can’t open the page "my-ip" because the server unexpectedly dropped the connection. This sometimes occurs when the server is busy. Wait for a few minutes and then try again.
停止脚本后 lsof -i:8080
的输出为
python3.7 11881 <user> 3u IPv4 <Device> 0t0 TCP <my machine address>?:http-alt (LISTEN)
我做了 kill 11881
然后重新 运行 代码,但在 Safari 中得到了相同的消息。
netstat -na | grep "8080"
的输出是
tcp4 0 0 <my machine address>.8080 *.* LISTEN
虽然脚本是 运行ning,但当我 KeyboardInterrupt
它时什么也没有。
Firefox 暂时显示页面然后显示错误页面
The connection was reset
Chrome 仅显示空白页。
更新: 它在 python 2.7 中有效,但在 3.5 中无效。代码的不同之处在于:
c.send('\n')
2.7 和
c.send(bytes('\n'.encode('utf-8')))
在 3.5 中
c
是
c, (client_host, client_port) = s.accept()
休息都一样。
我不小心注释掉了一行
c.recv(1000)
问题中提到了c
。
我在将它与同一文件的旧版本进行比较时发现了它。
我有一个简单的套接字服务器设置,可以将一些数字发送到 Intranet 中的客户端。在测试时,我从终端 (CTRL+C) 停止了 server.py
脚本,这后来在我尝试时导致 Safari 中的繁忙服务器错误到达同一页。
我看到了这个serverfault question但是问题是:
我找不到
/etc/init.d/networking restart
文件。我正在使用 Mac,这是用于 Linux。每次我测试我的服务器时,这也太过分了。至少每小时10次。在代码中插入选项
SO_REUSEADDR
确实有所帮助Address already in use
但我认为我的服务器已启动但处于繁忙状态。使用答案 here,我将 代码 编辑为:
host = <my machine address>
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 8080
s.bind((host, port))
我对我的服务器进行了哪些更改以消除 Safari 中的此错误?
Safari can’t open the page "my-ip" because the server unexpectedly dropped the connection. This sometimes occurs when the server is busy. Wait for a few minutes and then try again.
停止脚本后 lsof -i:8080
的输出为
python3.7 11881 <user> 3u IPv4 <Device> 0t0 TCP <my machine address>?:http-alt (LISTEN)
我做了 kill 11881
然后重新 运行 代码,但在 Safari 中得到了相同的消息。
netstat -na | grep "8080"
的输出是
tcp4 0 0 <my machine address>.8080 *.* LISTEN
虽然脚本是 运行ning,但当我 KeyboardInterrupt
它时什么也没有。
Firefox 暂时显示页面然后显示错误页面
The connection was reset
Chrome 仅显示空白页。
更新: 它在 python 2.7 中有效,但在 3.5 中无效。代码的不同之处在于:
c.send('\n')
2.7 和
c.send(bytes('\n'.encode('utf-8')))
在 3.5 中
c
是
c, (client_host, client_port) = s.accept()
休息都一样。
我不小心注释掉了一行
c.recv(1000)
问题中提到了c
。
我在将它与同一文件的旧版本进行比较时发现了它。