gpt4 book ai didi

python - asyncore 套接字未正确关闭

转载 作者:行者123 更新时间:2023-11-28 18:51:50 24 4
gpt4 key购买 nike

我已经编写(大部分是复制的)一个非常简单的 python 脚本来充当 xbmc 的来电显示插件。除了关闭套接字外,它按预期工作。我已经确认 xbmc.abortRequested(XBMC 正在关闭的通知)确实设置为 True,因此循环应该结束。但它没有(它似乎挂起)并且 xbmc 在清理过程中大约 5 秒后终止了脚本。这种不优雅的退出不会造成任何问题,但我更希望脚本正确退出。我不知道是否还有其他可以设置的超时时间或什么。感谢您的帮助。

道格

我的代码:

import socket, threading, thread, sys, asyncore, xbmc, xbmcgui, xbmcaddon
from time import *
from string import *

xbmc.log("YAC Listener: Starting")
PORT = 10629

class Server(asyncore.dispatcher):
def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.bind((host, port))
self.listen(1)

def handle_accept(self):
socket, address = self.accept()
ConnectionHandler(socket)

def handle_close(self):
self.close()
xbmc.log("YAC Listener: Closing Port")

class ConnectionHandler(asyncore.dispatcher_with_send):
def handle_read(self):
self.buffer = self.recv(1024)
self.buffer = split(self.buffer[5:], "~")
self.close()
global data
if len(self.buffer) > 1:
name = self.buffer[0]
number = self.buffer[1]
xbmc.executebuiltin("XBMC.Notification("+name+","+number+",7000,special://home/addons/script.yaclistener/phone.png)")
else:
data = self.buffer

s = Server('', PORT)

while not xbmc.abortRequested:
asyncore.loop(timeout=1)

s.close()
sys.exit()
xbmc.log("YAC Listener: Exiting")

最佳答案

“超时”的含义略有不同(大致可以认为是循环粒度)。

所以结束文件代码应该像下面这样:

...
while not xbmc.abortRequested:
asyncore.loop(timeout=1, count=1)

# this will try to close ALL current connections:
asyncore.close_all()
# this will give some time (up to 5 seconds) for things to settle down:
asyncore.loop(timeout=1, count=5)
sys.exit()
xbmc.log("YAC Listener: Exiting")

关于python - asyncore 套接字未正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com