Python 使用多处理和套接字时出现SSL错误
Python版本:3.4.3 Arch-Linux:4.1.3-1-Arch 使用SSL模块包装的套接字时,我遇到此错误:Python 使用多处理和套接字时出现SSL错误,python,sockets,ssl,multiprocessing,irc,Python,Sockets,Ssl,Multiprocessing,Irc,Python版本:3.4.3 Arch-Linux:4.1.3-1-Arch 使用SSL模块包装的套接字时,我遇到此错误: ssl.SSLError:[ssl:SSLV3\u ALERT\u BAD\u RECORD\u MAC]SSLV3 ALERT BAD RECORD MAC(\u ssl.c:1769) 你可能需要知道的事情。当我将一个方法传递给多进程时,会出现这个错误。我有一个基类irc,我的bot继承irc,bot将方法作为参数传递给进程。我正在尝试制作一个可以使用插件式系统的irc
ssl.SSLError:[ssl:SSLV3\u ALERT\u BAD\u RECORD\u MAC]SSLV3 ALERT BAD RECORD MAC(\u ssl.c:1769)
你可能需要知道的事情。当我将一个方法传递给多进程时,会出现这个错误。我有一个基类irc,我的bot继承irc,bot将方法作为参数传递给进程。我正在尝试制作一个可以使用插件式系统的irc机器人
我想我把范围缩小到套接字在进入多进程后关闭。但是,这仅在使用SSL时发生。
我认为可能是错误的,你需要知道
IRC SSL错误
这发生在我发送一个命令/插件/插件以用作多处理检查[3]之后。main
已作为模块动态加载,并且。mai
n是该模块中的一个函数,连接关闭。不带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
指向已在多处理系统下动态加载和运行的此模块:
导入时间
def main(nick, comargvs, chan, send):
print(nick, comargvs, chan)
time.sleep(5)
send("Success!")
在这是tun之后,父代码或调用主代码将获得我发布的错误,但仅当使用SSL时
这里是如果你需要更多关于它如何工作的信息。我只使用!在插件中测试或test.py
,以仅使用SSL重现错误,即配置文件中的SSL=True
,当禁用SSL时,它工作正常,符合预期
这个问题直到我开始将ircSend
传递给插件/addons
时才发生,当它们死亡时,SSL中的套接字也会死亡。我以前使用队列,但决定使用这种方式
任何帮助、抛出此错误的原因或仅在SSL中发生此错误的原因都将非常有用。现在可以解决此问题。我使用了Python3选择器和队列。问题是使用套接字流的句柄,这通常是可以的,但是使用SSL
我最初发布了一些错误
我认为问题在于将SSL套接字的句柄传递给“线程化”多进程。当它退出时,整个套接字的句柄也会退出,但只有在使用ssl时
线程锁和多处理锁没有帮助,RAND_add()和变体也没有帮助修复它(python文档推荐)
我的工作方式是,任何处理sock句柄的操作都保留在main中,读取阻塞socket是一个问题,但是移动到select时会超时,所以现在CPU没有被破坏,一切正常
已解决的代码位于main()下:
请在此处提供外部墨水中的信息,以免随时间丢失。外部墨水中的信息应该可以无限期地使用,当然是pastebin。至于我什么时候能让它工作,我会在回复中提供非工作代码和解决方案,让谷歌的人找到我想要的答案并保持相关性。不看代码,而是看到“多线程”——你知道你不应该处理来自多线程的同一TLS连接,至少不需要很多锁?也就是说,不要使用同一个连接在一个线程中读,在另一个线程中写。看,是的,我知道僵尸的事,而且正在着手。僵尸是个问题,会被修复的。我的主要问题是SSL,所以一切都很好。5年后。同样的混乱。。。确认。如果将SSL与python WebSocket结合使用,则会导致连接中断和各种错误。如果不使用SSL,则不会出现此类问题。