繁体   English   中英

如何使用recvfrom侦听来自特定主机的UDP数据报?

[英]How to listen for UDP datagrams from a certain host using recvfrom?

我有一个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或其他类似功能来侦听来自特定主机的数据报吗? 换句话说,是否有可能在不读取数据报的情况下从其他来源丢弃数据报?

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

如果套接字sockfd的类型为SOCK_DGRAM则addr是默认情况下向其发送数据报的地址, 并且是唯一从其接收数据报的地址

标准短语有点不同:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM