Browse Source

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
commit
f2f825dccc
2 changed files with 5 additions and 1 deletions
  1. +4
    -1
      daemon/udp_listener.c
  2. +1
    -0
      include/udp_listener.h

+ 4
- 1
daemon/udp_listener.c View File

@ -39,7 +39,8 @@ static void udp_listener_incoming(int fd, void *p, uintptr_t x) {
udp_buf->listener = cb->ul; 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 (len < 0) {
if (errno == EINTR) if (errno == EINTR)
continue; 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)) if (open_socket(sock, SOCK_DGRAM, ep->port, &ep->address))
goto fail; goto fail;
socket_pktinfo(sock);
ZERO(i); ZERO(i);
i.fd = sock->fd; i.fd = sock->fd;
i.closed = udp_listener_closed; i.closed = udp_listener_closed;


+ 1
- 0
include/udp_listener.h View File

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


Loading…
Cancel
Save