所以,我有一个服务器套接字定义为server_sock
,当前代码如下所示
# define a variable server_sock
server_sock.bind(("", PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
client_sock, client_info = server_sock.accept()
print("[+] Accepted connection from ", client_info)
server_sock.close()
client_sock.close()
# define a variable sock
sock.connect((host, port)) # This will be the client socket
现在,这段代码将创建一个server_sock
,监听传入的连接,并且在连接任何客户端之后,它将关闭这些套接字并通过使用另一个sock
充当客户端。
我打算做的是首先让代码作为服务器(即server_sock
应该等待连接)运行特定的超时(让我们假设10秒)。
在10秒之后,server_sock
应该自己关闭,然后下一段代码(即客户端部分)应该开始。
因此,在特定的超时后,从服务器模式到客户端模式的改变就像是松散的。
我很难解决这个问题。通常server_sock.accept()
线将被卡住,直到它遇到新连接,否则它将无法继续。
那么,我怎样才能实现在特定的超时后打破整个事情的东西。
请注意,我在Windows和UNIX上运行此代码跨平台。所以,我一直在寻找一些signal
特定的答案,但Windows不支持一些信号。
编辑:
很多人都说要在插座上使用settimeout()
。但这并不能解决我需要的行为。
因为假设我在server_sock模式下从设备获得连接,我想继续进行通信,而不是突然关闭套接字。
无论正在执行什么操作,settimeout()都将关闭套接字。所以,这没有回答我的情况
您只需使用超时功能即可。
# define a socket variable server_sock
server_sock.settimeout(10.0) #setting timeout for 10 sec
# rest of your code