mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
socket_server: 增加 request_package 初始化, 避免内存工具警告 (#2050)
* socket_server: 增加 request_package 初始化逻辑, 避免内存工具警告
* add request_init function instead of {0}
---------
Co-authored-by: efve.zff <efve.zff@alibaba-inc.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user