MT#55283 enable PKTINFO for UDP listeners

These may be bound to ANY so we want to know which local address each
packet was sent to.

Change-Id: I91e40e0b8000e44859255286e13b8f4c5d63b59f
pull/1759/head
Richard Fuchs 2 years ago
parent 8328c0b606
commit f2f825dccc

@ -39,7 +39,8 @@ static void udp_listener_incoming(int fd, void *p, uintptr_t x) {
udp_buf->listener = cb->ul;
}
len = socket_recvfrom(udp_buf->listener, udp_buf->str.s, MAX_UDP_LENGTH, &udp_buf->sin);
len = socket_recvfrom_to(udp_buf->listener, udp_buf->str.s, MAX_UDP_LENGTH, &udp_buf->sin,
&udp_buf->local_addr);
if (len < 0) {
if (errno == EINTR)
continue;
@ -87,6 +88,8 @@ int udp_listener_init(socket_t *sock, const endpoint_t *ep,
if (open_socket(sock, SOCK_DGRAM, ep->port, &ep->address))
goto fail;
socket_pktinfo(sock);
ZERO(i);
i.fd = sock->fd;
i.closed = udp_listener_closed;

@ -15,6 +15,7 @@ struct udp_buffer {
char buf[MAX_UDP_LENGTH + RTP_BUFFER_TAIL_ROOM + RTP_BUFFER_HEAD_ROOM + 1];
str str;
endpoint_t sin;
sockaddr_t local_addr;
char addr[64];
socket_t *listener;
};

Loading…
Cancel
Save