From 8da4034f529f3c5dcc3f95a7d81032cc9be543fb Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 27 Apr 2007 00:35:54 +0000 Subject: [PATCH] use ff_neterrno() and FF_NETERROR() for networking error handling Originally committed as revision 8845 to svn://svn.ffmpeg.org/ffmpeg/trunk --- ffserver.c | 21 ++++++++++++++------- libavformat/network.h | 3 +++ libavformat/rtpproto.c | 9 ++++++--- libavformat/tcp.c | 10 ++++++---- libavformat/udp.c | 6 ++++-- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/ffserver.c b/ffserver.c index e7b0b7b314..9f5502b228 100644 --- a/ffserver.c +++ b/ffserver.c @@ -588,7 +588,8 @@ static int http_server(void) second to handle timeouts */ do { ret = poll(poll_table, poll_entry - poll_table, delay); - if (ret < 0 && errno != EAGAIN && errno != EINTR) + if (ret < 0 && ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) return -1; } while (ret < 0); @@ -791,7 +792,8 @@ static int handle_connection(HTTPContext *c) read_loop: len = recv(c->fd, c->buffer_ptr, 1, 0); if (len < 0) { - if (errno != EAGAIN && errno != EINTR) + if (ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) return -1; } else if (len == 0) { return -1; @@ -826,7 +828,8 @@ static int handle_connection(HTTPContext *c) return 0; len = send(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr, 0); if (len < 0) { - if (errno != EAGAIN && errno != EINTR) { + if (ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) { /* error : close connection */ av_freep(&c->pb_buffer); return -1; @@ -896,7 +899,8 @@ static int handle_connection(HTTPContext *c) return 0; len = send(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr, 0); if (len < 0) { - if (errno != EAGAIN && errno != EINTR) { + if (ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) { /* error : close connection */ av_freep(&c->pb_buffer); return -1; @@ -922,7 +926,8 @@ static int handle_connection(HTTPContext *c) len = send(c->fd, c->packet_buffer_ptr, c->packet_buffer_end - c->packet_buffer_ptr, 0); if (len < 0) { - if (errno != EAGAIN && errno != EINTR) { + if (ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) { /* error : close connection */ av_freep(&c->packet_buffer); return -1; @@ -2333,7 +2338,8 @@ static int http_send_data(HTTPContext *c) /* TCP data output */ len = send(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr, 0); if (len < 0) { - if (errno != EAGAIN && errno != EINTR) { + if (ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) { /* error : close connection */ return -1; } else { @@ -2390,7 +2396,8 @@ static int http_receive_data(HTTPContext *c) len = recv(c->fd, c->buffer_ptr, c->buffer_end - c->buffer_ptr, 0); if (len < 0) { - if (errno != EAGAIN && errno != EINTR) { + if (ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) { /* error : close connection */ goto fail; } diff --git a/libavformat/network.h b/libavformat/network.h index 3aa8ba8367..7dcbfe244c 100644 --- a/libavformat/network.h +++ b/libavformat/network.h @@ -29,6 +29,9 @@ #endif #include +#define ff_neterrno() errno +#define FF_NETERROR(err) err + #if !defined(HAVE_INET_ATON) /* in os_support.c */ int inet_aton (const char * str, struct in_addr * add); diff --git a/libavformat/rtpproto.c b/libavformat/rtpproto.c index 4d32e667da..369a8057d2 100644 --- a/libavformat/rtpproto.c +++ b/libavformat/rtpproto.c @@ -178,7 +178,8 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) len = recvfrom (s->rtp_fd, buf, size, 0, (struct sockaddr *)&from, &from_len); if (len < 0) { - if (errno == EAGAIN || errno == EINTR) + if (ff_neterrno() == FF_NETERROR(EAGAIN) || + ff_neterrno() == FF_NETERROR(EINTR)) continue; return AVERROR_IO; } @@ -201,7 +202,8 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) len = recvfrom (s->rtcp_fd, buf, size, 0, (struct sockaddr *)&from, &from_len); if (len < 0) { - if (errno == EAGAIN || errno == EINTR) + if (ff_neterrno() == FF_NETERROR(EAGAIN) || + ff_neterrno() == FF_NETERROR(EINTR)) continue; return AVERROR_IO; } @@ -213,7 +215,8 @@ static int rtp_read(URLContext *h, uint8_t *buf, int size) len = recvfrom (s->rtp_fd, buf, size, 0, (struct sockaddr *)&from, &from_len); if (len < 0) { - if (errno == EAGAIN || errno == EINTR) + if (ff_neterrno() == FF_NETERROR(EAGAIN) || + ff_neterrno() == FF_NETERROR(EINTR)) continue; return AVERROR_IO; } diff --git a/libavformat/tcp.c b/libavformat/tcp.c index 40aba66a2d..b2f6d37a76 100644 --- a/libavformat/tcp.c +++ b/libavformat/tcp.c @@ -68,9 +68,9 @@ static int tcp_open(URLContext *h, const char *uri, int flags) ret = connect(fd, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); if (ret < 0) { - if (errno == EINTR) + if (ff_neterrno() == FF_NETERROR(EINTR)) goto redo; - if (errno != EINPROGRESS) + if (ff_neterrno() != FF_NETERROR(EINPROGRESS)) goto fail; /* wait until we are connected or until abort */ @@ -126,7 +126,8 @@ static int tcp_read(URLContext *h, uint8_t *buf, int size) if (ret > 0 && FD_ISSET(s->fd, &rfds)) { len = recv(s->fd, buf, size, 0); if (len < 0) { - if (errno != EINTR && errno != EAGAIN) + if (ff_neterrno() != FF_NETERROR(EINTR) && + ff_neterrno() != FF_NETERROR(EAGAIN)) return AVERROR(errno); } else return len; } else if (ret < 0) { @@ -155,7 +156,8 @@ static int tcp_write(URLContext *h, uint8_t *buf, int size) if (ret > 0 && FD_ISSET(s->fd, &wfds)) { len = send(s->fd, buf, size, 0); if (len < 0) { - if (errno != EINTR && errno != EAGAIN) + if (ff_neterrno() != FF_NETERROR(EINTR) && + ff_neterrno() != FF_NETERROR(EAGAIN)) return AVERROR(errno); continue; } diff --git a/libavformat/udp.c b/libavformat/udp.c index bbf8ca2ec6..e8721ce734 100644 --- a/libavformat/udp.c +++ b/libavformat/udp.c @@ -428,7 +428,8 @@ static int udp_read(URLContext *h, uint8_t *buf, int size) len = recvfrom (s->udp_fd, buf, size, 0, (struct sockaddr *)&from, &from_len); if (len < 0) { - if (errno != EAGAIN && errno != EINTR) + if (ff_neterrno() != FF_NETERROR(EAGAIN) && + ff_neterrno() != FF_NETERROR(EINTR)) return AVERROR_IO; } else { break; @@ -451,7 +452,8 @@ static int udp_write(URLContext *h, uint8_t *buf, int size) s->dest_addr_len); #endif if (ret < 0) { - if (errno != EINTR && errno != EAGAIN) + if (ff_neterrno() != FF_NETERROR(EINTR) && + ff_neterrno() != FF_NETERROR(EAGAIN)) return AVERROR_IO; } else { break;