From f5eee7dcbb703b2174321838a690177b01eaf577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=96=9C=E6=AC=A2=E5=85=B0=E8=8A=B1=E5=B1=B1=E4=B8=98?= Date: Sun, 30 May 2021 06:52:02 +0800 Subject: [PATCH] Update socket_server.c (#1410) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 去除冗余代码 2. fix 保存第一现场的错误码 --- skynet-src/socket_server.c | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index 80baebae..a109d6a4 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -4,7 +4,6 @@ #include "socket_poll.h" #include "atomic.h" #include "spinlock.h" -#include "skynet.h" #include #include @@ -307,13 +306,13 @@ static inline void send_object_init_from_sendbuffer(struct socket_server *ss, struct send_object *so, struct socket_sendbuffer *buf) { switch (buf->type) { case SOCKET_BUFFER_MEMORY: - send_object_init(ss, so, (void *)buf->buffer, buf->sz); + send_object_init(ss, so, buf->buffer, buf->sz); break; case SOCKET_BUFFER_OBJECT: - send_object_init(ss, so, (void *)buf->buffer, USEROBJECT); + send_object_init(ss, so, buf->buffer, USEROBJECT); break; case SOCKET_BUFFER_RAWPOINTER: - so->buffer = (void *)buf->buffer; + so->buffer = buf->buffer; so->sz = buf->sz; so->free_func = dummy_free; break; @@ -445,7 +444,7 @@ free_buffer(struct socket_server *ss, struct socket_sendbuffer *buf) { void *buffer = (void *)buf->buffer; switch (buf->type) { case SOCKET_BUFFER_MEMORY: - FREE((void *)buffer); + FREE(buffer); break; case SOCKET_BUFFER_OBJECT: ss->soi.free(buffer); @@ -1485,14 +1484,13 @@ forward_message_udp(struct socket_server *ss, struct socket *s, struct socket_lo switch(errno) { case EINTR: case AGAIN_WOULDBLOCK: - break; - default: - // close when error - force_close(ss, s, l, result); - result->data = strerror(errno); - return SOCKET_ERR; + return -1; } - return -1; + int error = errno; + // close when error + force_close(ss, s, l, result); + result->data = strerror(error); + return SOCKET_ERR; } stat_read(ss,s,n); @@ -1524,11 +1522,9 @@ report_connect(struct socket_server *ss, struct socket *s, struct socket_lock *l socklen_t len = sizeof(error); int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len); if (code < 0 || error) { - force_close(ss,s,l, result); - if (code >= 0) - result->data = strerror(error); - else - result->data = strerror(errno); + error = code < 0 ? errno : error; + force_close(ss, s, l, result); + result->data = strerror(error); return SOCKET_ERR; } else { ATOM_STORE(&s->type , SOCKET_TYPE_CONNECTED); @@ -1560,8 +1556,8 @@ static int getname(union sockaddr_all *u, char *buffer, size_t sz) { char tmp[INET6_ADDRSTRLEN]; void * sin_addr = (u->s.sa_family == AF_INET) ? (void*)&u->v4.sin_addr : (void *)&u->v6.sin6_addr; - int sin_port = ntohs((u->s.sa_family == AF_INET) ? u->v4.sin_port : u->v6.sin6_port); if (inet_ntop(u->s.sa_family, sin_addr, tmp, sizeof(tmp))) { + int sin_port = ntohs((u->s.sa_family == AF_INET) ? u->v4.sin_port : u->v6.sin6_port); snprintf(buffer, sz, "%s:%d", tmp, sin_port); return 1; } else {