Вызов recv зависает после вызова handle - PullRequest
2 голосов
/ 24 марта 2011

У меня есть класс Python, который я использую для эмуляции сервера IMAP для модульного теста.Когда происходит обратный вызов handle(), я пытаюсь использовать recv(), чтобы получить только что полученные данные, но я блокирую вызов recv().Я думал, что recv() вернется с данными, которые были получены, но вместо этого он просто сидит там.

В случае, если это имеет значение, я вижу, что сервер и основной поток отличаются в выводе журнала.

Я предполагаю, что это как-то связано с тем, что сокет был только что открыт, но через него данные не отправлялись.Нужно ли проверять, если это так, прежде чем пытаться позвонить recv()?

Я создал сервер, используя:

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    pass
...
# inside another class, we've got:
def startUp(self):
    server = ThreadedTCPServer(('localhost', 5593), FakeImapServerHandler)
    server.allow_reuse_address = True
    server_thread = threading.Thread(target=server.serve_forever)
    server_thread.setDaemon(True)
    server_thread.start()

Затем внутри некоторого другого кода в нашем модулетестируем, пытаемся подключиться к поддельному серверу:

    print("about to connect")
    self.__imapCon = imaplib.IMAP4("localhost", 5593)
    print("about to login") # we never get here
    self.__imapCon.login(Config.config["imapUser"], Config.config["imapPassw"])

Сервер реализован так:

class FakeImapServerHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        print("handling request")
        incoming = self.request.recv(1024)
        print("request was: " + incoming ) # never get here

1 Ответ

2 голосов
/ 24 марта 2011

(на этот раз опубликовано как ответ). В соответствии с протоколом IMAP серверы сначала говорят, отправляя клиенту приветствие OK.Кажется, и ваш сервер, и клиент пытаются одновременно вызвать recv () друг от друга:

atlas% telnet chaos 143
Trying 192.168.1.5...
Connected to chaos
Escape character is '^]'.
* OK chaos Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...