2

我有一个 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 结构中获得了有关发件人的信息,并且可以检查地址、端口等。我的问题是:我可以使用recv,recvfrom或其他类似功能来侦听来自某个主机的数据报吗?换句话说,是否有可能从其他来源删除数据报而不读取它们?

4

1 回答 1

1

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

如果套接字 sockfd 是类型,SOCK_DGRAM那么 addr 是默认发送数据报的地址,也是接收数据报的唯一地址

标准用语略有不同:

对于SOCK_DGRAM套接字,对等地址标识所有数据报在后续send()功能上发送到哪里,并限制远程发送方用于后续recv()功能

于 2013-04-07T10:27:46.213 回答