]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/udp.c
use ff_neterrno() and FF_NETERROR() for networking error handling
[ffmpeg] / libavformat / udp.c
index 96fa4e152c1c54ea5a3ade4f869f00c05367da3c..e8721ce7349d5067b56c0e0286473d8433e7cc0c 100644 (file)
  */
 #include "avformat.h"
 #include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#ifndef __BEOS__
-# include <arpa/inet.h>
-#else
-# include "barpainet.h"
-#endif
-#include <netdb.h>
+#include "network.h"
 
 #ifndef IPV6_ADD_MEMBERSHIP
 #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
@@ -214,11 +206,7 @@ static int udp_ipv6_set_local(URLContext *h) {
 
  fail:
     if (udp_fd >= 0)
-#ifdef CONFIG_BEOS_NETSERVER
         closesocket(udp_fd);
-#else
-        close(udp_fd);
-#endif
     if(res0)
         freeaddrinfo(res0);
     return -1;
@@ -307,7 +295,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
 
     s = av_malloc(sizeof(UDPContext));
     if (!s)
-        return -ENOMEM;
+        return AVERROR(ENOMEM);
 
     h->priv_data = s;
     s->ttl = 16;
@@ -342,7 +330,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
     }
 
 #ifndef CONFIG_IPV6
-    udp_fd = socket(PF_INET, SOCK_DGRAM, 0);
+    udp_fd = socket(AF_INET, SOCK_DGRAM, 0);
     if (udp_fd < 0)
         goto fail;
 
@@ -367,7 +355,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
     getsockname(udp_fd, (struct sockaddr *)&my_addr1, &len);
     s->local_port = ntohs(my_addr1.sin_port);
 
-#ifndef CONFIG_BEOS_NETSERVER
+#ifdef IP_MULTICAST_TTL
     if (s->is_multicast) {
         if (h->flags & URL_WRONLY) {
             /* output */
@@ -395,7 +383,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
     udp_fd = udp_ipv6_set_local(h);
     if (udp_fd < 0)
         goto fail;
-#ifndef CONFIG_BEOS_NETSERVER
     if (s->is_multicast) {
         if (h->flags & URL_WRONLY) {
             if (udp_ipv6_set_multicast_ttl(udp_fd, s->ttl, (struct sockaddr *)&s->dest_addr) < 0)
@@ -405,7 +392,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
                 goto fail;
         }
     }
-#endif
 #endif
 
     if (is_output) {
@@ -421,11 +407,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
     return 0;
  fail:
     if (udp_fd >= 0)
-#ifdef CONFIG_BEOS_NETSERVER
         closesocket(udp_fd);
-#else
-        close(udp_fd);
-#endif
     av_free(s);
     return AVERROR_IO;
 }
@@ -446,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;
@@ -469,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;
@@ -482,22 +466,20 @@ static int udp_close(URLContext *h)
 {
     UDPContext *s = h->priv_data;
 
-#ifndef CONFIG_BEOS_NETSERVER
 #ifndef CONFIG_IPV6
+#ifdef IP_DROP_MEMBERSHIP
     if (s->is_multicast && !(h->flags & URL_WRONLY)) {
         if (setsockopt(s->udp_fd, IPPROTO_IP, IP_DROP_MEMBERSHIP,
                        &s->mreq, sizeof(s->mreq)) < 0) {
             perror("IP_DROP_MEMBERSHIP");
         }
     }
+#endif
 #else
     if (s->is_multicast && !(h->flags & URL_WRONLY))
         udp_ipv6_leave_multicast_group(s->udp_fd, (struct sockaddr *)&s->dest_addr);
 #endif
-    close(s->udp_fd);
-#else
     closesocket(s->udp_fd);
-#endif
     av_free(s);
     return 0;
 }