Procházet zdrojové kódy

!73 修正wget不能正常dns查询的问题
Merge pull request !73 from jesven/fix_net_syscall

bernard před 5 roky
rodič
revize
cdb44bd385
1 změnil soubory, kde provedl 25 přidání a 5 odebrání
  1. 25 5
      components/lwp/lwp_syscall.c

+ 25 - 5
components/lwp/lwp_syscall.c

@@ -1046,9 +1046,9 @@ int sys_recvfrom(int socket, void *mem, size_t len, int flags,
     if (from)
     if (from)
     {
     {
         struct sockaddr sa;
         struct sockaddr sa;
-        sockaddr_tolwip(from, &sa);
 
 
         ret = recvfrom(socket, kmem, len, flgs, &sa, fromlen);
         ret = recvfrom(socket, kmem, len, flgs, &sa, fromlen);
+        sockaddr_tomusl(&sa, from);
     } else
     } else
         ret = recvfrom(socket, kmem, len, flgs, NULL, NULL);
         ret = recvfrom(socket, kmem, len, flgs, NULL, NULL);
 
 
@@ -1060,10 +1060,12 @@ int sys_recvfrom(int socket, void *mem, size_t len, int flags,
 #else
 #else
     if (from)
     if (from)
     {
     {
-        struct sockaddr sa;
-        sockaddr_tolwip(from, &sa);
+        int ret = -1;
+        struct sockaddr sa = {0};
 
 
-        return recvfrom(socket, mem, len, flgs, &sa, fromlen);
+        ret = recvfrom(socket, mem, len, flgs, &sa, fromlen);
+        sockaddr_tomusl(&sa, from);
+        return ret;
     }
     }
 
 
     return recvfrom(socket, mem, len, flags, NULL, NULL);
     return recvfrom(socket, mem, len, flags, NULL, NULL);
@@ -1135,10 +1137,28 @@ int sys_send(int socket, const void *dataptr, size_t size, int flags)
 
 
 int sys_socket(int domain, int type, int protocol)
 int sys_socket(int domain, int type, int protocol)
 {
 {
+    int fd = -1;
+    int nonblock = 0;
     /* not support SOCK_CLOEXEC type */
     /* not support SOCK_CLOEXEC type */
     if (type & SOCK_CLOEXEC) type &= ~SOCK_CLOEXEC;
     if (type & SOCK_CLOEXEC) type &= ~SOCK_CLOEXEC;
+    if (type & SOCK_NONBLOCK)
+    {
+        nonblock = 1;
+        type &= ~SOCK_NONBLOCK;
+    }
+
+    fd = socket(domain, type, protocol);
+    if (fd < 0)
+    {
+        goto out;
+    }
+    if (nonblock)
+    {
+        fcntl(fd, F_SETFL, O_NONBLOCK);
+    }
 
 
-    return socket(domain, type, protocol);
+out:
+    return fd;
 }
 }
 
 
 int sys_closesocket(int socket)
 int sys_closesocket(int socket)