当前位置: 技术问答>linux和unix
UDP怎么检测对方socket已关闭无法接收数据?
来源: 互联网 发布时间:2015-06-24
本文导语: 我的程序原理:客户端向服务器端发送一个请求后,服务器端不停地向客户端发送数据,直到客户端关闭。 可由于要用无连接的UDP,客户端正常/异常关闭后服务器端还在不停地发数据,因为我不知道怎样检测对方的U...
我的程序原理:客户端向服务器端发送一个请求后,服务器端不停地向客户端发送数据,直到客户端关闭。
可由于要用无连接的UDP,客户端正常/异常关闭后服务器端还在不停地发数据,因为我不知道怎样检测对方的UDP socket已关闭。
出现这种情况时,在Windows下,sendto成功,但发送一个数据报后该socket立即有数据可读事件,调用recvfrom结果返回失败,错误代码为10054表示对端不存在
可是在Linux下,sendto也成功,但发送后也检测不到有数据可读事件,怎么办呢?
可由于要用无连接的UDP,客户端正常/异常关闭后服务器端还在不停地发数据,因为我不知道怎样检测对方的UDP socket已关闭。
出现这种情况时,在Windows下,sendto成功,但发送一个数据报后该socket立即有数据可读事件,调用recvfrom结果返回失败,错误代码为10054表示对端不存在
可是在Linux下,sendto也成功,但发送后也检测不到有数据可读事件,怎么办呢?
|
每隔一断时间发送一个(或者几个)测试数据报,如果对方没有回应,就可以认为断开了连接。
|
用connected UDP,可以收到出错的ICMP
|
向未开的UDP端口发送数据,应该有ICMP Port unreachable的信息返回把?
|
upd本来就是一个不可靠的协议,
要使udp通信的数据可靠就要靠你的应用程序
实现一些协议,
例如你可以程序去实现数据包的接受回应,
成功接受到数据包就回应
......
要使udp通信的数据可靠就要靠你的应用程序
实现一些协议,
例如你可以程序去实现数据包的接受回应,
成功接受到数据包就回应
......
|
请求方正常/异常退出 对方的会返回一个FIN包的 不过如果是对方主机崩溃 那是没有一个简单的方法知道
只有查询了
只有查询了
|
这个用UDP好像不行吧,他本身都是发了就不管的,你也没法知道他到底收到没有啊。自己写程序实现一下。
|
一应一答,无应答则为关闭
|
只能采用应答方式来确认,一应一答,可以确定如果几次收不到就认为关闭
|
只有定时让对方发一个回应。
|
不知道有不有icmp包!应该又吧