gpt4 book ai didi

python - 使用多处理和套接字时出现 SSL 错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:28 26 4
gpt4 key购买 nike

Python 版本:3.4.3

Arch Linux:4.1.3-1-ARCH

我在使用 SSL 模块包装的套接字时收到此错误:ssl.SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 警报错误记录 mac (_ssl.c:1769)

您可能需要知道的事情。将方法传递给多进程时出现此错误。我有一个基类 irc,我的 bot 继承了 irc,bot 是将方法作为参数传递给进程的那个。我正在尝试制作一个可以使用插件类型系统的 irc 机器人。

我想我缩小到进入多进程后关闭套接字。但是,只有在使用 SSL 时才会发生这种情况。

Here is the pastebin我认为您需要知道的可能错误的内容。

IRC SSL 错误

这发生在我发送命令/插件/插件以用作 multiprocessing check[3].main 已动态加载为模块和 .main是该模块中的一个函数,连接关闭。没有 SSL 的普通套接字工作得很好并且符合预期,只有当它包装在 SSL 中时它似乎会关闭连接?

ssl.SSLError: [SSL: SSLV3_ALERT_BAD_RECORD_MAC] sslv3 alert bad record mac (_ssl.c:1769)

com_process = multiprocessing.Process(target=check[3].main, args=(check[0], check[1], check[2], self.sendIrc))

sendIrc is only being used as below in another class we have inherited from.
def sendIrc(self, data):
if type(data) == str:
self.sendData("PRIVMSG %s :%s\r\n" % (self.channel, data))
return

sendData encode as utf-8 because python3:
def sendData(self, data):
self.sock.send(data.encode('utf-8'))

check[3].main 指向这个在multiprocessing下动态加载运行的模块: 导入时间

def main(nick, comargvs, chan, send):
print(nick, comargvs, chan)
time.sleep(5)
send("Success!")

在此 tun 之后,父代码或调用主代码会收到我发布的错误,但仅在使用 SSL 时出现。

这里是 the GitHub Repository of the bot如果您需要有关其工作原理的更多信息。我只在 addons 中使用 !testtest.py 来使用 SSL 重现错误,即 ssl = True 在配置文件中,当禁用 SSL 时,它工作得很好并且符合预期。

这个问题直到我开始将 ircSend 传递给 plugins/addons 时才发生,当它们死掉时,SSL 中的套接字也会死掉。我以前使用队列,但决定使用这种方式。

任何帮助或为什么抛出此错误或为什么它只发生在 SSL 上都会很好。

最佳答案

现在已经解决了。我选择了 python 3 选择器和队列。问题是使用套接字流的句柄,这通常没问题,但使用 SSL我最初发布时有错误。

我认为,问题在于将 SSL 套接字的句柄传递给“线程”/多进程。当它退出时,整个套接字的句柄也会退出,但仅在使用 ssl 时。

线程锁和多进程锁没有帮助,RAND_add() 和变体也没有帮助修复它(python 文档推荐)。

我的工作方式是,处理 sock handle 的任何事情都留在 main 中,读取阻塞套接字是一个问题,但移动到 select 超时,所以现在 CPU 没有被强奸,一切正常。

已解决的代码在 main() 下: https://github.com/nulldigit90/TechBot/blob/master/ircbot/TechBot.py

关于python - 使用多处理和套接字时出现 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31768631/

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