如何使用recvfrom监听来自某个主机的UDP数据报?

时间:2013-04-07 10:24:28

标签: c udp

我有一个C代码片段,它监听UDP套接字以获取消息(并且它可以正常工作):

uint32_t udp_port = 101010; // example port
int sock_udp = socket(AF_INET, SOCK_DGRAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(udp_port);
bind(sock_udp, (struct sockaddr*) &server_address, (socklen_t) sizeof(server_address));

char buffer[20];
struct sockaddr_in sender_address;
socklen_t sender_len = (socklen_t) sizeof(struct sockaddr_in);
ssize_t rcv_len = recvfrom(sock_udp, buffer, sizeof(buffer), 0, (struct sockaddr * ) &sender_address, &sender_len);

之后我在sender_address结构中有关于发件人的信息,我可以检查地址,端口等。我的问题是:我可以使用recvrecvfrom或其他类似功能来监听数据报的到来来自某个主持人?换句话说,是否可以在不读取数据报的情况下从其他来源删除数据报?

1 个答案:

答案 0 :(得分:1)

如果connect(2)数据报套接字,您可以“过滤”并从指定的单一来源接收数据报。

  

如果socket sockfd的类型为SOCK_DGRAM,那么addr就是地址   默认情况下发送哪些数据报,和唯一的地址   收到数据报

The standard短语有点不同:

  

对于SOCK_DGRAM套接字,对等地址标识所有套接字   数据报在后续send()函数上发送,并限制   后续recv()函数的远程发件人