Also use ff_neterrno() instead of errno directly (which doesn't work
on windows), for getting the error code.
---
 libavformat/mmst.c |   20 +++++++++++++++-----
 libavformat/tcp.c  |    6 ++++--
 libavformat/udp.c  |   31 +++++++++++++++++++------------
 3 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/libavformat/mmst.c b/libavformat/mmst.c
index 4b96f5d..1e89f7f 100644
--- a/libavformat/mmst.c
+++ b/libavformat/mmst.c
@@ -141,10 +141,12 @@ static int send_command_packet(MMSTContext *mmst)
     // write it out.
     write_result= ffurl_write(mms->mms_hd, mms->out_buffer, exact_length);
     if(write_result != exact_length) {
+        char errbuf[100];
+        av_strerror(write_result, errbuf, sizeof(errbuf));
         av_log(NULL, AV_LOG_ERROR,
                "Failed to write data of length %d: %d (%s)\n",
                exact_length, write_result,
-               write_result < 0 ? strerror(AVUNERROR(write_result)) :
+               write_result < 0 ? errbuf :
                    "The server closed the connection");
         return AVERROR(EIO);
     }
@@ -244,9 +246,11 @@ static MMSSCPacketType get_tcp_server_response(MMSTContext 
*mmst)
         read_result = ffurl_read_complete(mms->mms_hd, mms->in_buffer, 8);
         if (read_result != 8) {
             if(read_result < 0) {
+                char errbuf[100];
+                av_strerror(read_result, errbuf, sizeof(errbuf));
                 av_log(NULL, AV_LOG_ERROR,
                        "Error reading packet header: %d (%s)\n",
-                       read_result, strerror(AVUNERROR(read_result)));
+                       read_result, errbuf);
                 packet_type = SC_PKT_CANCEL;
             } else {
                 av_log(NULL, AV_LOG_ERROR,
@@ -263,10 +267,12 @@ static MMSSCPacketType 
get_tcp_server_response(MMSTContext *mmst)
             mmst->incoming_flags= mms->in_buffer[3];
             read_result= ffurl_read_complete(mms->mms_hd, mms->in_buffer+8, 4);
             if(read_result != 4) {
+                char errbuf[100];
+                av_strerror(read_result, errbuf, sizeof(errbuf));
                 av_log(NULL, AV_LOG_ERROR,
                        "Reading command packet length failed: %d (%s)\n",
                        read_result,
-                       read_result < 0 ? strerror(AVUNERROR(read_result)) :
+                       read_result < 0 ? errbuf :
                            "The server closed the connection");
                 return read_result < 0 ? read_result : AVERROR(EIO);
             }
@@ -284,10 +290,12 @@ static MMSSCPacketType 
get_tcp_server_response(MMSTContext *mmst)
             read_result = ffurl_read_complete(mms->mms_hd, mms->in_buffer + 12,
                                             length_remaining) ;
             if (read_result != length_remaining) {
+                char errbuf[100];
+                av_strerror(read_result, errbuf, sizeof(errbuf));
                 av_log(NULL, AV_LOG_ERROR,
                        "Reading pkt data (length=%d) failed: %d (%s)\n",
                        length_remaining, read_result,
-                       read_result < 0 ? strerror(AVUNERROR(read_result)) :
+                       read_result < 0 ? errbuf :
                            "The server closed the connection");
                 return read_result < 0 ? read_result : AVERROR(EIO);
             }
@@ -321,10 +329,12 @@ static MMSSCPacketType 
get_tcp_server_response(MMSTContext *mmst)
             mms->read_in_ptr         = mms->in_buffer;
             read_result= ffurl_read_complete(mms->mms_hd, mms->in_buffer, 
length_remaining);
             if(read_result != length_remaining) {
+                char errbuf[100];
+                av_strerror(read_result, errbuf, sizeof(errbuf));
                 av_log(NULL, AV_LOG_ERROR,
                        "Failed to read packet data of size %d: %d (%s)\n",
                        length_remaining, read_result,
-                       read_result < 0 ? strerror(AVUNERROR(read_result)) :
+                       read_result < 0 ? errbuf :
                            "The server closed the connection");
                 return read_result < 0 ? read_result : AVERROR(EIO);
             }
diff --git a/libavformat/tcp.c b/libavformat/tcp.c
index 7e348f7..e7c6210 100644
--- a/libavformat/tcp.c
+++ b/libavformat/tcp.c
@@ -141,10 +141,12 @@ static int tcp_open(URLContext *h, const char *uri, int 
flags)
         optlen = sizeof(ret);
         getsockopt (fd, SOL_SOCKET, SO_ERROR, &ret, &optlen);
         if (ret != 0) {
+            char errbuf[100];
+            ret = AVERROR(ret);
+            av_strerror(ret, errbuf, sizeof(errbuf));
             av_log(h, AV_LOG_ERROR,
                    "TCP connection to %s:%d failed: %s\n",
-                   hostname, port, strerror(ret));
-            ret = AVERROR(ret);
+                   hostname, port, errbuf);
             goto fail;
         }
     }
diff --git a/libavformat/udp.c b/libavformat/udp.c
index 04433bc..77ab8c2 100644
--- a/libavformat/udp.c
+++ b/libavformat/udp.c
@@ -57,13 +57,20 @@ typedef struct {
 #define UDP_TX_BUF_SIZE 32768
 #define UDP_MAX_PKT_SIZE 65536
 
+static void log_net_error(void *ctx, int level, const char* prefix)
+{
+    char errbuf[100];
+    av_strerror(ff_neterrno(), errbuf, sizeof(errbuf));
+    av_log(ctx, level, "%s: %s\n", prefix, errbuf);
+}
+
 static int udp_set_multicast_ttl(int sockfd, int mcastTTL,
                                  struct sockaddr *addr)
 {
 #ifdef IP_MULTICAST_TTL
     if (addr->sa_family == AF_INET) {
         if (setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &mcastTTL, 
sizeof(mcastTTL)) < 0) {
-            av_log(NULL, AV_LOG_ERROR, "setsockopt(IP_MULTICAST_TTL): %s\n", 
strerror(errno));
+            log_net_error(NULL, AV_LOG_ERROR, "setsockopt(IP_MULTICAST_TTL)");
             return -1;
         }
     }
@@ -71,7 +78,7 @@ static int udp_set_multicast_ttl(int sockfd, int mcastTTL,
 #if defined(IPPROTO_IPV6) && defined(IPV6_MULTICAST_HOPS)
     if (addr->sa_family == AF_INET6) {
         if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &mcastTTL, 
sizeof(mcastTTL)) < 0) {
-            av_log(NULL, AV_LOG_ERROR, "setsockopt(IPV6_MULTICAST_HOPS): 
%s\n", strerror(errno));
+            log_net_error(NULL, AV_LOG_ERROR, 
"setsockopt(IPV6_MULTICAST_HOPS)");
             return -1;
         }
     }
@@ -88,7 +95,7 @@ static int udp_join_multicast_group(int sockfd, struct 
sockaddr *addr)
         mreq.imr_multiaddr.s_addr = ((struct sockaddr_in 
*)addr)->sin_addr.s_addr;
         mreq.imr_interface.s_addr= INADDR_ANY;
         if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const void 
*)&mreq, sizeof(mreq)) < 0) {
-            av_log(NULL, AV_LOG_ERROR, "setsockopt(IP_ADD_MEMBERSHIP): %s\n", 
strerror(errno));
+            log_net_error(NULL, AV_LOG_ERROR, "setsockopt(IP_ADD_MEMBERSHIP)");
             return -1;
         }
     }
@@ -100,7 +107,7 @@ static int udp_join_multicast_group(int sockfd, struct 
sockaddr *addr)
         memcpy(&mreq6.ipv6mr_multiaddr, &(((struct sockaddr_in6 
*)addr)->sin6_addr), sizeof(struct in6_addr));
         mreq6.ipv6mr_interface= 0;
         if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, &mreq6, 
sizeof(mreq6)) < 0) {
-            av_log(NULL, AV_LOG_ERROR, "setsockopt(IPV6_ADD_MEMBERSHIP): 
%s\n", strerror(errno));
+            log_net_error(NULL, AV_LOG_ERROR, 
"setsockopt(IPV6_ADD_MEMBERSHIP)");
             return -1;
         }
     }
@@ -117,7 +124,7 @@ static int udp_leave_multicast_group(int sockfd, struct 
sockaddr *addr)
         mreq.imr_multiaddr.s_addr = ((struct sockaddr_in 
*)addr)->sin_addr.s_addr;
         mreq.imr_interface.s_addr= INADDR_ANY;
         if (setsockopt(sockfd, IPPROTO_IP, IP_DROP_MEMBERSHIP, (const void 
*)&mreq, sizeof(mreq)) < 0) {
-            av_log(NULL, AV_LOG_ERROR, "setsockopt(IP_DROP_MEMBERSHIP): %s\n", 
strerror(errno));
+            log_net_error(NULL, AV_LOG_ERROR, 
"setsockopt(IP_DROP_MEMBERSHIP)");
             return -1;
         }
     }
@@ -129,7 +136,7 @@ static int udp_leave_multicast_group(int sockfd, struct 
sockaddr *addr)
         memcpy(&mreq6.ipv6mr_multiaddr, &(((struct sockaddr_in6 
*)addr)->sin6_addr), sizeof(struct in6_addr));
         mreq6.ipv6mr_interface= 0;
         if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_DROP_MEMBERSHIP, &mreq6, 
sizeof(mreq6)) < 0) {
-            av_log(NULL, AV_LOG_ERROR, "setsockopt(IPV6_DROP_MEMBERSHIP): 
%s\n", strerror(errno));
+            log_net_error(NULL, AV_LOG_ERROR, 
"setsockopt(IPV6_DROP_MEMBERSHIP)");
             return -1;
         }
     }
@@ -194,7 +201,7 @@ static int udp_socket_create(UDPContext *s, struct 
sockaddr_storage *addr,
     for (res = res0; res; res=res->ai_next) {
         udp_fd = socket(res->ai_family, SOCK_DGRAM, 0);
         if (udp_fd > 0) break;
-        av_log(NULL, AV_LOG_ERROR, "socket: %s\n", strerror(errno));
+        log_net_error(NULL, AV_LOG_ERROR, "socket");
     }
 
     if (udp_fd < 0)
@@ -268,7 +275,7 @@ int ff_udp_set_remote_url(URLContext *h, const char *uri)
                 if (connect(s->udp_fd, (struct sockaddr *) &s->dest_addr,
                             s->dest_addr_len)) {
                     s->is_connected = 0;
-                    av_log(h, AV_LOG_ERROR, "connect: %s\n", strerror(errno));
+                    log_net_error(h, AV_LOG_ERROR, "connect");
                     return AVERROR(EIO);
                 }
             }
@@ -391,7 +398,7 @@ static int udp_open(URLContext *h, const char *uri, int 
flags)
      * bind failed */
     /* the bind is needed to give a port to the socket now */
     if (bind_ret < 0 && bind(udp_fd,(struct sockaddr *)&my_addr, len) < 0) {
-        av_log(h, AV_LOG_ERROR, "bind failed: %s\n", strerror(errno));
+        log_net_error(h, AV_LOG_ERROR, "bind failed");
         goto fail;
     }
 
@@ -416,7 +423,7 @@ static int udp_open(URLContext *h, const char *uri, int 
flags)
         /* limit the tx buf size to limit latency */
         tmp = s->buffer_size;
         if (setsockopt(udp_fd, SOL_SOCKET, SO_SNDBUF, &tmp, sizeof(tmp)) < 0) {
-            av_log(h, AV_LOG_ERROR, "setsockopt(SO_SNDBUF): %s\n", 
strerror(errno));
+            log_net_error(h, AV_LOG_ERROR, "setsockopt(SO_SNDBUF)");
             goto fail;
         }
     } else {
@@ -424,14 +431,14 @@ static int udp_open(URLContext *h, const char *uri, int 
flags)
          * avoid losing data on OSes that set this too low by default. */
         tmp = s->buffer_size;
         if (setsockopt(udp_fd, SOL_SOCKET, SO_RCVBUF, &tmp, sizeof(tmp)) < 0) {
-            av_log(h, AV_LOG_WARNING, "setsockopt(SO_RECVBUF): %s\n", 
strerror(errno));
+            log_net_error(h, AV_LOG_WARNING, "setsockopt(SO_RECVBUF)");
         }
         /* make the socket non-blocking */
         ff_socket_nonblock(udp_fd, 1);
     }
     if (s->is_connected) {
         if (connect(udp_fd, (struct sockaddr *) &s->dest_addr, 
s->dest_addr_len)) {
-            av_log(h, AV_LOG_ERROR, "connect: %s\n", strerror(errno));
+            log_net_error(h, AV_LOG_ERROR, "connect");
             goto fail;
         }
     }
-- 
1.7.9.4

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to