]> git.sesse.net Git - vlc/blobdiff - src/network/winsock.c
Fix spurious "please select network protocol manually" error
[vlc] / src / network / winsock.c
index fecd3fd417afd1d8c0aa8a7febc908daaa7cb3e0..dd7f598feb260484c3c2c8ed78b865407686f61c 100644 (file)
@@ -22,7 +22,7 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
 #include <errno.h>
 #include <vlc_network.h>
 
@@ -148,7 +148,8 @@ const char *net_strerror( int value )
     return "Unknown network stack error";
 }
 
-ssize_t sendmsg (int s, struct msghdr *hdr, int flags)
+#if 0
+ssize_t vlc_sendmsg (int s, struct msghdr *hdr, int flags)
 {
     /* WSASendMsg would be more straightforward, and would support ancilliary
      * data, but it's not yet in mingw32. */
@@ -170,7 +171,7 @@ ssize_t sendmsg (int s, struct msghdr *hdr, int flags)
     return -1;
 }
 
-ssize_t recvmsg (int s, struct msghdr *hdr, int flags)
+ssize_t vlc_recvmsg (int s, struct msghdr *hdr, int flags)
 {
     /* WSARecvMsg would be more straightforward, and would support ancilliary
      * data, but it's not yet in mingw32. */
@@ -185,12 +186,16 @@ ssize_t recvmsg (int s, struct msghdr *hdr, int flags)
         buf[i].buf = hdr->msg_iov[i].iov_base,
         buf[i].len = hdr->msg_iov[i].iov_len;
 
-    DWORD recvd;
+    DWORD recvd, dwFlags = flags;
+    INT fromlen = hdr->msg_namelen;
     hdr->msg_controllen = 0;
     hdr->msg_flags = 0;
 
-    if (WSARecvFrom (s, buf, sizeof (buf) / sizeof (buf[0]), &recvd, flags,
-                     hdr->msg_name, hdr->msg_namelen, NULL, NULL) == 0)
+    int ret = WSARecvFrom (s, buf, sizeof (buf) / sizeof (buf[0]), &recvd,
+                           &dwFlags, hdr->msg_name, &fromlen, NULL, NULL);
+    hdr->msg_namelen = fromlen;
+    hdr->msg_flags = dwFlags;
+    if (ret == 0)
         return recvd;
 
 #ifdef MSG_TRUNC
@@ -204,3 +209,4 @@ ssize_t recvmsg (int s, struct msghdr *hdr, int flags)
 #endif
     return -1;
 }
+#endif