From fa777e7b07d9e6f55ae5842c0f8aca11b481e292 Mon Sep 17 00:00:00 2001 From: shaojinchun Date: Wed, 2 Dec 2020 15:21:45 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E5=A2=9E=E5=8A=A0socket=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E7=9A=84type=E8=BD=AC=E6=8D=A2=202.=20=E4=BF=AE=E6=AD=A3recvfr?= =?UTF-8?q?om=E5=87=BD=E6=95=B0=E7=9A=84from=E5=8F=82=E6=95=B0=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E6=96=B9=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/lwp/lwp_syscall.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index fb89fce9ce..62ebb7d2d9 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -1046,9 +1046,9 @@ int sys_recvfrom(int socket, void *mem, size_t len, int flags, if (from) { struct sockaddr sa; - sockaddr_tolwip(from, &sa); ret = recvfrom(socket, kmem, len, flgs, &sa, fromlen); + sockaddr_tomusl(&sa, from); } else 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 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); @@ -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 fd = -1; + int nonblock = 0; /* not support SOCK_CLOEXEC type */ 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) -- Gitee