我正在编写一个数据库库,它必须智能地支持超时。现在我正在研究连接池,我特别担心以下场景:
- 发送查询#1 n秒后超时。
- 发送查询#2
- 接收查询#1的响应
步骤四可以发生,因为查询没有标记查询ID:我只知道我收到了一个响应,我不知道它属于哪个查询。有人可能会说这构成了协议中的一个错误,但这不是我说了算。
在发送查询#2之前,我应该对套接字做些什么来避免这么晚的回复?shutdown()
, close()
和re- connect()
是唯一正确的方法吗?
恐怕这是操作您的连接的唯一安全方法,因为没有其他方法可以在TCP上获得一对一的问题和答案。两者之间似乎缺少某种cancel函数。
这个参考提供了更多的见解:http://www.ssfnet.org/Exchange/tcp/tcpTutorialNotes.html