在linux上使用python进行套接字编程 - s.connect()超时

时间:2017-12-01 13:59:04

标签: python linux sockets

我使用TCP套接字连接到某个网页,因为它将在循环中运行,尝试创建套接字,连接,发送数据,然后接收然后关闭套接字。问题是s.connect()在随机迭代和特定网站上超时。我读到了TCP time_wait所以

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

添加没有运气。然后在每次迭代后休息一秒,但仍然没有运气。 我应该注意到它在另一个较慢的网络中工作正常,但不是在快速的网络中我试图运行代码。 我认为遵循伪代码可以更明确地阐明它:

while(1)
{time.sleep(1)
s = socket.socket() #TCP socket creation
s.settimeout(2) # 2 seconds for time-out which is more than needed
s.connect()
s.send(message) #which is a HTTP get request
s.recv() # which is a HTTP response
s.close()}

我的代码例程遵循以下步骤,每个套接字方法都正确实现,但我在连接上得到超时。我确信服务器正常运行。我怀疑它可能与TCP time_wait有关,但评论似乎并不同意

1 个答案:

答案 0 :(得分:1)

如果与服务器的TCP握手未在特定时间内完成,则连接超时,通常是因为服务器没有及时响应。可能有各种原因,例如服务器关闭,在DNS查找期间为服务器获取错误的IP地址,服务器过载等。

  

s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)

在连接的客户端添加此功能是没有用的。

如果问题是由崩溃的服务器引起的,那么在服务器端添加它将有所帮助,因为它将允许服务器再次绑定到侦听器地址而无需等待,从而服务器再次更快地可用。但是,我不知道这是否真的是你面临的问题。