Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用多处理和套接字时出现SSL错误_Python_Sockets_Ssl_Multiprocessing_Irc - Fatal编程技术网

Python 使用多处理和套接字时出现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

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时发生。

我认为可能是错误的,你需要知道

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,则不会出现此类问题。