首页 > 解决方案 > Python 2.7 server.socket 超时问题

问题描述

我有一些 python 代码有时会在打开连接但没有发送数据时阻塞。我明白为什么它在等待 64 位或更少的数据。它将永远等待。如果没有收到数据,是否有一种简单的方法可以使连接超时。任何帮助或建议将不胜感激。

    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(('', port))
    serversocket.listen(5) # become a server socket, maximum 5 connections
    while 1:
        try:
            while 1:
               # print "Waiting for oonnection..."
                connection, address = serversocket.accept()
                buf = connection.recv(64)

标签: pythonsocketsservertimeout

解决方案


您可以使用socket.settimeout(value)wherevalue是秒数。

    serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serversocket.bind(('', port))
    serversocket.listen(5) # become a server socket, maximum 5 connections

    while 1:
        try:
            while 1:
               # print "Waiting for oonnection..."
                connection, address = serversocket.accept()
                connection.settimeout(5) # Set 5 seconds timeout to receive 64 bytes of data

                buf = connection.recv(64)

        except socket.timeout:
            print("Timeout happened -- goting back to accept another connection")

推荐阅读