2016-11-05 2 views
0

Я пытаюсь одновременно прослушивать и отправлять данные в несколько сокетов. Когда я запускаю программу, я получаю ан ошибке говоря:Запуск нескольких сокетов одновременно в python

File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/ssl.py", line 704, in __init__ 
if sock.getsockopt(SOL_SOCKET, SO_TYPE) != SOCK_STREAM: 

OSError: [Errno 9] Descriptor несовместимый файл

Первое гнездо начинается правильно, но когда я пытаюсь начать новую я получаю ошибка.

class bot: 
    def __init__(self, host, port): 
     self.host = host 
     self.port = port 

    sock = socket.socket() 
    s = None 

    def connect_to_server(self): 
     self.s = ssl.wrap_socket(self.sock) 
     self.s.connect((self.host, self.port)) 

Выше класса, а затем я запускаю несколько экземпляров.

def run_bots(bots): 
    for bot in bots: 
     try: 
      threading.Thread(target=bot.connect_to_server()).start() 
     except: 
      print(bot.host) 
      print("Error: unable to start thread") 
bots = [] 
b = bot('hostname.com', 1234) 
b1 = bot('hostname1.com', 1234) 
bots.append(b) 
bots.append(b1) 
run_bots(bots) 

Я не знаю, что делать. У кого-нибудь есть идея, что может быть проблемой?

ответ

1

Вы используете тот же разъем. Создайте один для каждого бота:

class bot: 
    def __init__(self, host, port): 
     self.host = host 
     self.port = port 
     self.s = None 

    def connect_to_server(self): 
     sock = socket.socket() 
     self.s = ssl.wrap_socket(sock) 
     self.s.connect((self.host, self.port)) 
+0

Но не создаю новый, когда создаю новый экземпляр класса ботов? – Marius

+0

Это работает. благодаря :) – Marius

Смежные вопросы