diff --git a/daemon/call.c b/daemon/call.c index 97568e8c9..f6c349d57 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1315,6 +1315,8 @@ enum call_stream_state call_stream_state_machine(struct packet_stream *ps) { static const str fake_rtp = STR_CONST_INIT("\x80\x7f\xff\xff\x00\x00\x00\x00" "\x00\x00\x00\x00"); struct stream_fd *sfd = l->data; + if (sfd->socket.fd == -1 || ps->endpoint.address.family == NULL) + continue; socket_sendto(&sfd->socket, fake_rtp.s, fake_rtp.len, &ps->endpoint); atomic64_inc(&ps->stats_out.packets); atomic64_add(&ps->stats_out.bytes, fake_rtp.len); diff --git a/daemon/media_player.c b/daemon/media_player.c index a0655f897..5743488d9 100644 --- a/daemon/media_player.c +++ b/daemon/media_player.c @@ -229,7 +229,7 @@ static void send_timer_rtcp(struct send_timer *st, struct ssrc_ctx *ssrc_out) { static bool __send_timer_send_1(struct rtp_header *rh, struct packet_stream *sink, struct codec_packet *cp) { struct stream_fd *sink_fd = sink->selected_sfd; - if (!sink_fd || sink_fd->socket.fd == -1) + if (!sink_fd || sink_fd->socket.fd == -1 || sink->endpoint.address.family == NULL) return false; log_info_stream_fd(sink->selected_sfd); diff --git a/daemon/rtcp.c b/daemon/rtcp.c index 62d8bf766..f39f4a646 100644 --- a/daemon/rtcp.c +++ b/daemon/rtcp.c @@ -1575,6 +1575,8 @@ void rtcp_send_report(struct call_media *media, struct ssrc_ctx *ssrc_out) { if (!ps->selected_sfd || !rtcp_ps->selected_sfd) return; + if (ps->selected_sfd->socket.fd == -1 || ps->endpoint.address.family == NULL) + return; media_update_stats(media); diff --git a/daemon/t38.c b/daemon/t38.c index ee003e362..994a0afb5 100644 --- a/daemon/t38.c +++ b/daemon/t38.c @@ -223,7 +223,7 @@ static int t38_gateway_handler(t38_core_state_t *stat, void *user_data, const ui struct stream_fd *sfd = NULL; if (ps) sfd = ps->selected_sfd; - if (sfd) { + if (sfd && sfd->socket.fd != -1 && ps->endpoint.address.family != NULL) { for (int i = 0; i < count; i++) { ilog(LOG_DEBUG, "Sending %u UDPTL bytes", (unsigned int) s->len); socket_sendto(&sfd->socket, s->str, s->len, &ps->endpoint); diff --git a/lib/socket.c b/lib/socket.c index 54e8fc7a9..fb11199f0 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -359,6 +359,8 @@ static ssize_t __ip_sendmsg(socket_t *s, struct msghdr *mh, const endpoint_t *ep static ssize_t __ip_sendto(socket_t *s, const void *buf, size_t len, const endpoint_t *ep) { struct sockaddr_storage sin; + if (!ep->address.family) + return -1; ep->address.family->endpoint2sockaddr(&sin, ep); return sendto(s->fd, buf, len, 0, (void *) &sin, ep->address.family->sockaddr_size); }