network: Check POLLERR and POLLHUP in ff_network_wait_fd
authorGil Pedersen <gil@cmi.aau.dk>
Thu, 28 Apr 2011 07:27:40 +0000 (10:27 +0300)
committerMartin Storsjö <martin@martin.st>
Thu, 28 Apr 2011 07:28:51 +0000 (10:28 +0300)
Previously, the function would lead to an infinite wait (by
returning AVERROR(EAGAIN)) on sockets indicating an error
via either of these poll flags.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavformat/network.h

index 84a8f53..881384c 100644 (file)
@@ -78,7 +78,7 @@ static inline int ff_network_wait_fd(int fd, int write)
     struct pollfd p = { .fd = fd, .events = ev, .revents = 0 };
     int ret;
     ret = poll(&p, 1, 100);
-    return ret < 0 ? ff_neterrno() : p.revents & ev ? 0 : AVERROR(EAGAIN);
+    return ret < 0 ? ff_neterrno() : p.revents & (ev | POLLERR | POLLHUP) ? 0 : AVERROR(EAGAIN);
 }
 
 static inline void ff_network_close(void)