Python:使用套接字库制作的 IRC 机器人返回错误 "Bad file descriptor"

Python: IRC bot made with socket library returning error "Bad file descriptor"

我一直在尝试编写一个 IRC 机器人,但是当我尝试向它发送命令时,我一直收到错误“错误的文件描述符”,这很难解决,我也不知道为什么会这样,我的代码对我来说很好;有谁知道它可能有什么问题吗?

下面是导致我出现问题的代码部分。

import socket, random

server = "irc.example.com"

def main(nummessages, channel, message)   
ircsock.connect((server, 6697))
            for i in range (nummessages):
                with open('cookies.txt', 'r') as info:
                        channel = f'#{channel}'
                        info = info.read().splitlines()
                        info = random.choice(info)
                        info = info.split(':')
                        token = info[1]
                        username = info[0]
                        nick = username
                        ircsock.send(bytes('NICK' + ' ' + username + '\n', 'UTF-8'))
                        ircsock.send(bytes('PASS' + ' oauth:' + token + '\n', 'UTF-8'))
                        ircsock.send(bytes('JOIN' + ' ' + channel + '\n', 'UTF-8'))
                        ircsock.send(bytes('PRIVMSG ' + channel + ' :' + message + '\r\n', 'UTF-8'))
                        ircsock.send(bytes('PART' + ' ' + channel + '\n', 'UTF-8'))
                        ircsock.send(bytes('QUIT' + ':Bye' + '\n', 'UTF-8'))
                        ircsock.shutdown(socket.SHUT_RDWR)
                        ircsock.close()
test1 = 1
test2 = "test"
test3 = "test"

def main(test1, test2, test3)

当您尝试使用您已经关闭的 file/socket/etc 时,可能会出现“错误的文件描述符”。

你的代码根本不起作用,但我假设你在为问题编辑它时破坏了它。很明显,你在循环外创建一个套接字,在循环外连接它,然后你重复几次你发送一些消息并关闭它。

所以你的程序打开套接字,连接套接字,发送消息,关闭套接字,发送更多消息,关闭套接字,发送更多消息,关闭套接字,...我希望你能明白为什么正在尝试使用封闭的套接字。

如果你想要一个新的套接字连接,那么每次你想要一个新的连接时你都必须connect,而且你还需要一个新的套接字。每个插座只能使用一次 - 你不能关闭它然后再连接它 - 你必须关闭它并制作一个新的。