通过设置套接字的选项(IP_PKTINFO) 来获取收到报文的源地址和目的地址。
这里使用的是调用的是recvmsg接口,实际上一个还有更简单的接口recvfrom接口也能够满足要求,可以参考这篇博客。
https://blog.csdn.net/fuyuande/article/details/80588453
代码如下:
/*
* Description : UDP套接字编程获取源地址和目的地址
* Date : 20180527
*/
#include #include #include #include #include #include #include #include #include #include #include #include #include "udptest.h"
void main() {
int on = 1;
int ret, fd, addr_len, recv_len;
char buffer[512] = {0}; /* 接收缓存 */
struct msghdr msg;
struct iovec iov[1];
struct sockaddr_in saddr; /* src */
struct sockaddr_in daddr; /* dst */
struct cmsghdr *cmhp;
struct sockaddr_in server_addr;
struct in_pktinfo *pktinfo = NULL; /* 用于指向获取的本地地址信息 */
char buff[CMSG_SPACE(sizeof(struct in_pktinfo) + CMSG_SPACE(sizeo