首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asyncore套接字未正确关闭

asyncore套接字未正确关闭
EN

Stack Overflow用户
提问于 2012-08-10 04:35:36
回答 1查看 917关注 0票数 3

我已经编写(主要是复制)一个非常简单的python脚本来充当xbmc的Caller ID插件。除了关闭套接字之外,它可以正常工作。我已经确认了xbmc.abortRequested ( XBMC正在关闭的通知)确实被设置为True,因此循环应该结束。但它没有(它似乎挂起了),xbmc在清理过程中大约5秒后就会杀死脚本。这个不优雅的退出不会造成任何问题,但我更希望脚本能够正确退出。我不知道是否有其他类型的超时可以设置或什么。谢谢你的帮助。

道格

我的代码:

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

发布于 2014-09-03 17:59:03

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

因此,最终文件代码应该类似于smth,如下所示:

代码语言:javascript
复制
...
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")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11891536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档