tcp 感知对方连接状态有关问题
tcp感知对方连接状态问题我想问一下使用winsockapi(非CSocket)1、编写程序感知TCP 的 peer端的连接状态怎么
tcp 感知对方连接状态问题
我想问一下使用
winsock api(非CSocket)
1、编写程序感知TCP 的 peer端的连接状态怎么办,通过什么函数判断?
2、udp用得着判断连接状态吗?还是只管发就行?能感知peer的状态吗?
第一个是比较想知道的放在第一位。
[解决办法]
设置KEEPLIVE
[解决办法]
问题一:
1、数据接收和发送时,根据返回值可以判断连接是否断开。
2、定期keepalive,可以比较及时知道连接断开。
3、tcp协议栈keepalive判断,这个值一般比较大,不太及时。
问题二:
udp是无连接的,因此无所谓断开的问题。
[解决办法]对于TCP,用SO_KEEPALIVE选项,时间值可以用WSAIoctl函数设定SIO_KEEPALIVE_VALS选项来更改,也可以自定义应用层心跳
至于UDP,UDP是无连接的协议
[解决办法][解决办法]recv这个API的说明认真看一下,它返回0表示对方链接状态关闭,-1表示网络出现错误,其他表示接收到多少。
select可以监视TCP事件。TCP状态你要关心的无非是1:连接上了。2:有数据到了。3:可以发数据了,虽然这个一般很少考虑,但是你要考虑流浪很大可能会拥塞的话就要考虑。4:连接关闭了。
这些事件都是通过select监视到相应的事件得到的。
[解决办法]