From b2612d92ebd1ff7f6953ef80662270a92a1c7fe2 Mon Sep 17 00:00:00 2001 From: EfveZombie <34877029+EfveZombie@users.noreply.github.com> Date: Wed, 21 May 2025 15:35:57 +0800 Subject: [PATCH] =?UTF-8?q?socket=5Fserver:=20=E5=A2=9E=E5=8A=A0=20request?= =?UTF-8?q?=5Fpackage=20=E5=88=9D=E5=A7=8B=E5=8C=96,=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E5=86=85=E5=AD=98=E5=B7=A5=E5=85=B7=E8=AD=A6=E5=91=8A=20(#2050?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * socket_server: 增加 request_package 初始化逻辑, 避免内存工具警告 * add request_init function instead of {0} --------- Co-authored-by: efve.zff --- skynet-src/socket_server.c | 68 +++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index a6e83880..8b7c4bd8 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -163,7 +163,7 @@ struct request_listen { int id; int fd; uintptr_t opaque; - char host[1]; + // char host[1]; }; struct request_bind { @@ -349,7 +349,7 @@ write_buffer_free(struct socket_server *ss, struct write_buffer *wb) { static void socket_keepalive(int fd) { int keepalive = 1; - setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive)); + setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive)); } static int @@ -366,7 +366,7 @@ reserve_id(struct socket_server *ss) { if (ATOM_CAS(&s->type, type_invalid, SOCKET_TYPE_RESERVE)) { s->id = id; s->protocol = PROTOCOL_UNKNOWN; - // socket_server_udp_connect may inc s->udpconncting directly (from other thread, before new_fd), + // socket_server_udp_connect may inc s->udpconncting directly (from other thread, before new_fd), // so reset it to 0 here rather than in new_fd. ATOM_INIT(&s->udpconnecting, 0); s->fd = -1; @@ -386,7 +386,7 @@ clear_wb_list(struct wb_list *list) { list->tail = NULL; } -struct socket_server * +struct socket_server * socket_server_create(uint64_t time) { int i; int fd[2]; @@ -520,7 +520,7 @@ force_close(struct socket_server *ss, struct socket *s, struct socket_lock *l, s socket_unlock(l); } -void +void socket_server_release(struct socket_server *ss) { int i; struct socket_message dummy; @@ -835,7 +835,7 @@ list_uncomplete(struct wb_list *s) { struct write_buffer *wb = s->head; if (wb == NULL) return 0; - + return (void *)wb->ptr != wb->buffer; } @@ -901,7 +901,7 @@ send_buffer_(struct socket_server *ss, struct socket *s, struct socket_lock *l, } if (s->low.head) return -1; - } + } // step 4 assert(send_buffer_empty(s) && s->wb_size == 0); @@ -1582,9 +1582,9 @@ forward_message_udp(struct socket_server *ss, struct socket *s, struct socket_lo static int report_connect(struct socket_server *ss, struct socket *s, struct socket_lock *l, struct socket_message *result) { int error; - socklen_t len = sizeof(error); - int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len); - if (code < 0 || error) { + socklen_t len = sizeof(error); + int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len); + if (code < 0 || error) { error = code < 0 ? errno : error; force_close(ss, s, l, result); result->data = strerror(error); @@ -1684,7 +1684,7 @@ report_accept(struct socket_server *ss, struct socket *s, struct socket_message return 1; } -static inline void +static inline void clear_closed_event(struct socket_server *ss, struct socket_message * result, int type) { if (type == SOCKET_CLOSE || type == SOCKET_ERR) { int id = result->id; @@ -1703,7 +1703,7 @@ clear_closed_event(struct socket_server *ss, struct socket_message * result, int } // return type -int +int socket_server_poll(struct socket_server *ss, struct socket_message * result, int * more) { for (;;) { if (ss->checkctrl) { @@ -1781,7 +1781,7 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int --ss->event_index; } if (type == -1) - break; + break; return type; } if (e->write) { @@ -1792,8 +1792,8 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int } if (e->error) { int error; - socklen_t len = sizeof(error); - int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len); + socklen_t len = sizeof(error); + int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len); const char * err = NULL; if (code < 0) { err = strerror(errno); @@ -1855,9 +1855,15 @@ open_request(struct socket_server *ss, struct request_package *req, uintptr_t op return len; } -int +static inline void +request_init(struct request_package *req) { + memset(req, 0, sizeof(*req)); +} + +int socket_server_connect(struct socket_server *ss, uintptr_t opaque, const char * addr, int port) { struct request_package request; + request_init(&request); int len = open_request(ss, &request, opaque, addr, port); if (len < 0) return -1; @@ -1871,7 +1877,7 @@ can_direct_write(struct socket *s, int id) { } // return -1 when error, 0 when success -int +int socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) { int id = buf->id; struct socket * s = &ss->slot[HASH_ID(id)]; @@ -1921,6 +1927,7 @@ socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) { socket_unlock(&l); struct request_package request; + request_init(&request); request.u.send.id = id; request.u.send.sz = 0; request.u.send.buffer = NULL; @@ -1936,6 +1943,7 @@ socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) { inc_sending_ref(s, id); struct request_package request; + request_init(&request); request.u.send.id = id; request.u.send.buffer = clone_buffer(buf, &request.u.send.sz); @@ -1944,7 +1952,7 @@ socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) { } // return -1 when error, 0 when success -int +int socket_server_send_lowpriority(struct socket_server *ss, struct socket_sendbuffer *buf) { int id = buf->id; @@ -1957,6 +1965,7 @@ socket_server_send_lowpriority(struct socket_server *ss, struct socket_sendbuffe inc_sending_ref(s, id); struct request_package request; + request_init(&request); request.u.send.id = id; request.u.send.buffer = clone_buffer(buf, &request.u.send.sz); @@ -1967,12 +1976,14 @@ socket_server_send_lowpriority(struct socket_server *ss, struct socket_sendbuffe void socket_server_exit(struct socket_server *ss) { struct request_package request; + request_init(&request); send_request(ss, &request, 'X', 0); } void socket_server_close(struct socket_server *ss, uintptr_t opaque, int id) { struct request_package request; + request_init(&request); request.u.close.id = id; request.u.close.shutdown = 0; request.u.close.opaque = opaque; @@ -1983,6 +1994,7 @@ socket_server_close(struct socket_server *ss, uintptr_t opaque, int id) { void socket_server_shutdown(struct socket_server *ss, uintptr_t opaque, int id) { struct request_package request; + request_init(&request); request.u.close.id = id; request.u.close.shutdown = 1; request.u.close.opaque = opaque; @@ -2052,13 +2064,14 @@ do_listen(const char * host, int port, int backlog) { return listen_fd; } -int +int socket_server_listen(struct socket_server *ss, uintptr_t opaque, const char * addr, int port, int backlog) { int fd = do_listen(addr, port, backlog); if (fd < 0) { return -1; } struct request_package request; + request_init(&request); int id = reserve_id(ss); if (id < 0) { close(fd); @@ -2074,6 +2087,7 @@ socket_server_listen(struct socket_server *ss, uintptr_t opaque, const char * ad int socket_server_bind(struct socket_server *ss, uintptr_t opaque, int fd) { struct request_package request; + request_init(&request); int id = reserve_id(ss); if (id < 0) return -1; @@ -2087,6 +2101,7 @@ socket_server_bind(struct socket_server *ss, uintptr_t opaque, int fd) { void socket_server_start(struct socket_server *ss, uintptr_t opaque, int id) { struct request_package request; + request_init(&request); request.u.resumepause.id = id; request.u.resumepause.opaque = opaque; send_request(ss, &request, 'R', sizeof(request.u.resumepause)); @@ -2095,6 +2110,7 @@ socket_server_start(struct socket_server *ss, uintptr_t opaque, int id) { void socket_server_pause(struct socket_server *ss, uintptr_t opaque, int id) { struct request_package request; + request_init(&request); request.u.resumepause.id = id; request.u.resumepause.opaque = opaque; send_request(ss, &request, 'S', sizeof(request.u.resumepause)); @@ -2103,20 +2119,21 @@ socket_server_pause(struct socket_server *ss, uintptr_t opaque, int id) { void socket_server_nodelay(struct socket_server *ss, int id) { struct request_package request; + request_init(&request); request.u.setopt.id = id; request.u.setopt.what = TCP_NODELAY; request.u.setopt.value = 1; send_request(ss, &request, 'T', sizeof(request.u.setopt)); } -void +void socket_server_userobject(struct socket_server *ss, struct socket_object_interface *soi) { ss->soi = *soi; } // UDP -int +int socket_server_udp(struct socket_server *ss, uintptr_t opaque, const char * addr, int port) { int fd; int family; @@ -2141,12 +2158,13 @@ socket_server_udp(struct socket_server *ss, uintptr_t opaque, const char * addr, return -1; } struct request_package request; + request_init(&request); request.u.udp.id = id; request.u.udp.fd = fd; request.u.udp.opaque = opaque; request.u.udp.family = family; - send_request(ss, &request, 'U', sizeof(request.u.udp)); + send_request(ss, &request, 'U', sizeof(request.u.udp)); return id; } @@ -2172,6 +2190,7 @@ socket_server_udp_listen(struct socket_server *ss, uintptr_t opaque, const char* return -1; } struct request_package request; + request_init(&request); request.u.udp.id = id; request.u.udp.fd = fd; request.u.udp.opaque = opaque; @@ -2223,6 +2242,7 @@ socket_server_udp_dial(struct socket_server *ss, uintptr_t opaque, const char* a } struct request_package request; + request_init(&request); request.u.dial_udp.id = id; request.u.dial_udp.fd = fd; request.u.dial_udp.opaque = opaque; @@ -2236,7 +2256,7 @@ socket_server_udp_dial(struct socket_server *ss, uintptr_t opaque, const char* a return id; } -int +int socket_server_udp_send(struct socket_server *ss, const struct socket_udp_address *addr, struct socket_sendbuffer *buf) { int id = buf->id; struct socket * s = &ss->slot[HASH_ID(id)]; @@ -2289,6 +2309,7 @@ socket_server_udp_send(struct socket_server *ss, const struct socket_udp_address } struct request_package request; + request_init(&request); request.u.send_udp.send.id = id; request.u.send_udp.send.buffer = clone_buffer(buf, &request.u.send_udp.send.sz); @@ -2329,6 +2350,7 @@ socket_server_udp_connect(struct socket_server *ss, int id, const char * addr, i return -1; } struct request_package request; + request_init(&request); request.u.set_udp.id = id; int protocol;