summaryrefslogtreecommitdiff
path: root/libavformat/libsrt.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2020-02-13 23:58:45 +0100
committerMarton Balint <cus@passwd.hu>2020-02-24 00:02:45 +0100
commitaab9133d919bec4af54a06216d8629ebe4fb8f74 (patch)
tree4f4f1f161a2f812d75b2e5443402b501635e8f0b /libavformat/libsrt.c
parent006744bdbd83d98bc71cb041d9551bf6a64b45a2 (diff)
avformat/libsrt: fix checking connection result in non-blocking mode
After f8990c5f414d4575415e2a3981c3b142222ca3d4 we properly set non-blocking mode which makes the connect() call return always 0 even if no connection can be established. Fix this by always doing a poll after calling connect(). Also there was some leftover copy paste code which checks for various errors which are simply not possible with SRT. Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/libsrt.c')
-rw-r--r--libavformat/libsrt.c41
1 files changed, 13 insertions, 28 deletions
diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c
index 378acb045a..1ab6c1ddb3 100644
--- a/libavformat/libsrt.c
+++ b/libavformat/libsrt.c
@@ -250,34 +250,19 @@ static int libsrt_listen_connect(int eid, int fd, const struct sockaddr *addr, s
if (libsrt_socket_nonblock(fd, 1) < 0)
av_log(h, AV_LOG_DEBUG, "ff_socket_nonblock failed\n");
- while ((ret = srt_connect(fd, addr, addrlen))) {
- ret = libsrt_neterrno(h);
- switch (ret) {
- case AVERROR(EINTR):
- if (ff_check_interrupt(&h->interrupt_callback))
- return AVERROR_EXIT;
- continue;
- case AVERROR(EINPROGRESS):
- case AVERROR(EAGAIN):
- ret = libsrt_network_wait_fd_timeout(h, eid, fd, 1, timeout, &h->interrupt_callback);
- if (ret < 0)
- return ret;
- ret = srt_getlasterror(NULL);
- srt_clearlasterror();
- if (ret != 0) {
- char buf[128];
- ret = AVERROR(ret);
- av_strerror(ret, buf, sizeof(buf));
- if (will_try_next)
- av_log(h, AV_LOG_WARNING,
- "Connection to %s failed (%s), trying next address\n",
- h->filename, buf);
- else
- av_log(h, AV_LOG_ERROR, "Connection to %s failed: %s\n",
- h->filename, buf);
- }
- default:
- return ret;
+ ret = srt_connect(fd, addr, addrlen);
+ if (ret < 0)
+ return libsrt_neterrno(h);
+
+ ret = libsrt_network_wait_fd_timeout(h, eid, fd, 1, timeout, &h->interrupt_callback);
+ if (ret < 0) {
+ if (will_try_next) {
+ av_log(h, AV_LOG_WARNING,
+ "Connection to %s failed (%s), trying next address\n",
+ h->filename, av_err2str(ret));
+ } else {
+ av_log(h, AV_LOG_ERROR, "Connection to %s failed: %s\n",
+ h->filename, av_err2str(ret));
}
}
return ret;