我在linux平台下,建立一个TCP套接字,绑定到49156端口,向UPNP SERVER发一个subscribe订阅请求,超时时间设置为5minutes.linux
而后开启一个Thread_Main主接收线程。该线程完成如下工做:服务器
(1)调用select监听是否有数据可读,设置4s的超时;架构
(2)若是select返回值正常(>0),则调用accept,接收客户端请求;函数
(3)调用recv接收客户端数据;线程
(4)解析收到的TCP裸数据;server
其软件架构以下图所示::事件
初步怀疑:软件
(1)因为发送的subscribe订阅请求是有超时限制的,所以必须在超时前向upnp server发送续订请求。select
代码初步改动以下:bug
按这种思路,添加续订请求后,问题依然存在,百思不得其解。
经过wireshark抓包分析,发现这种状况下,个人机器是收到了upnp server的notify消息的。
那为何个人TCP程序却解析不到呢?
经过添加打印发现,异常状况下, select函数始终返回0.也就是说,个人TCP服务器程序始终认为没有数据可读或超。这是一个很奇怪的现象。
所以断定这段TCP服务器程序存在bug。
代码对比: