最近得写个udpAgent,由于要做udpServer端的容灾,所以要感知udpAgent发出的UDP包是否被某个udpServer进程接收。但是UDP协议本身是无连接和无状态的,也就是说默认情况下,udpAgent进程是无法感知其发出的UDP包是否被成功接收。
但是,从TCP/IP协议栈来说,如果一个UDP包没有到达目的地址,发送端会收到一个的ICMP不可达报文。所以现在的问题是如何让进程捕获到这个ICMP不可达错误,结论就是调用connect( )函数,即使用有连接的UDP。
// ================================================================================================
这里做个简单实验:
1、无连接的UDP:Socket( )=>SendTo( )
2、有连接的UDP:Socket( )=>Connect( )=>Send( )
下面是基础的无连接UDP客户端代码(SendUdp_NoCon.cpp):发送2个UDP包到一个不存在的目标地址(127.0.0.1:8888)
#include <iostream>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
using namespace std;
int main()
{
int i,