关闭打开的连接以允许下一个呼叫通过

2024-05-17 06:59:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在玩shadowsocks软件,并试图使自动添加和删除功能正常工作,它调用正常,但在下一次调用中我得到错误socket.error: [Errno 98] Address already in use

import socket

cli = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
cli.bind('/tmp/client.sock')  # address of the client
cli.connect('/var/run/shadowsocks-manager.sock')  # address of Shadowsocks manager

cli.send(b'ping')
print(cli.recv(1506))  # You'll receive 'pong'

cli.send(b'add: {"server_port":8001, "password":"7cd308cc059"}')
print(cli.recv(1506))  # You'll receive 'ok'

有没有可能让它关闭套接字,或者让它重用现有的套接字?你知道吗


Tags: ofclientyousendcli软件shadowsocksaddress
2条回答

从终端的外壳下方尝试
rm -rf /var/run/shadowsocks-manager.sock /tmp/client.sock

我认为询问者不想删除服务器套接字,只想删除客户端套接字。你知道吗

从控制台,这应该足够了:

rm /tmp/client.sock

但您也可以在脚本顶部自动执行此操作:

import os

if os.path.exists('/tmp/client.sock'):
  os.remove('/tmp/client.sock')

Relevant Github issue

改进的实施将:

  • 每次创建一个唯一的套接字文件(例如/tmp/ssclient.sock.$PID
  • 使用try - finally,这样在进程结束时它总是删除/取消链接文件。你知道吗

相关问题 更多 >