留言与评论(共有 0 条评论) |
发布时间:2020-04-15 16:23:19
那个啥,程序B的UDP那边因为A关闭了端口所以发给A的数据包都被A丢弃,所以B那边再调用recvfrom函数就直接接收到A那边给的错误信息而返回-1了是吗。
其实这个时候不用重新创建socket绑定端口也没关系的,因为UDP本来就是无连接的。它和TCP不同,它可以针对每次发送都指定不同的目标地址的,也不管你数据有没有发到。
一个UDP端口只能被一个进程绑定一次,你的程序A关闭UDP端口并重新打开,B那边如果也要重新打开端口的话也要先关闭原来的端口(就是关了套接字)才能再打开。
总觉得说得好乱……这样,你先试试看在A对外网的TCP连接被强行关闭之后,如果没有必要那么就不对UDP进行关闭和重新打开操作,只对和外网通信的TCP socket进行重新创建和连接。如果A关闭并重开UDP端口是作为给B的一种信号的话,可以通过某种自定义的UDP数据包传输这种信号(若不方便复用已有的UDP socket,那么可以使用其他的进程间通讯手段,比如命名事件(Event内核对象))。
留言与评论(共有 0 条评论) |
全站搜索