aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2012-03-16 08:14:23 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2014-03-13 08:08:33 +0100
commitfd395f45032a9e4d388b95211838cf8116dc8411 (patch)
tree24e4974aa5e549fca3865b1d7cf272b26c70fff5
parentc2d1a2196ac59dd338bd142e1fbefd9c1e8ae235 (diff)
Fixed problem of mute audio on some calls
When reading from RTP socket, the first read() may fail right after connecting to remote socket. Subsequent read() will work as it should. If the remote socket does not open fast enough, the transmitted RTP payload can cause an ICMP (connection refused) packet reply. This causes the read to fail with errno=111. In all other error cases, the errno is logged at debug level. In all error cases, reading is not disabled.
-rw-r--r--openbsc/src/libtrau/rtp_proxy.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/openbsc/src/libtrau/rtp_proxy.c b/openbsc/src/libtrau/rtp_proxy.c
index ad3dbb648..52abad0ce 100644
--- a/openbsc/src/libtrau/rtp_proxy.c
+++ b/openbsc/src/libtrau/rtp_proxy.c
@@ -497,9 +497,16 @@ static int rtp_socket_read(struct rtp_socket *rs, struct rtp_sub_socket *rss)
return -ENOMEM;
rc = read(rss->bfd.fd, msg->data, RTP_ALLOC_SIZE);
- if (rc <= 0) {
- rss->bfd.when &= ~BSC_FD_READ;
- return rc;
+ if (rc == 0)
+ goto out_free;
+ if (rc < 0) {
+ /* Ignore "connection refused". this happens, If we open the
+ * socket faster than the remove side. */
+ if (errno == ECONNREFUSED)
+ goto out_free;
+ DEBUGPC(DLMUX, "Read of RTP socket (%p) failed (errno %d, "
+ "%s)\n", rs, errno, strerror(errno));
+ goto out_free;
}
msgb_put(msg, rc);