From cd4a1c3959c1dff7cf29c75935145a39ca0d4727 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Sun, 22 Sep 2019 21:31:55 +0800 Subject: [PATCH] multi_socket_client.c: code refine --- HISTORY | 1 + src/multi_socket_client.c | 9 ++++++++- src/multi_socket_client.h | 7 ++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/HISTORY b/HISTORY index d674de0..f7dd1f6 100644 --- a/HISTORY +++ b/HISTORY @@ -3,6 +3,7 @@ Version 1.41 2019-09-22 * change CIDR network_bits range from [16, 32) to [10, 32) * ini_file_reader.c: fix empty string compare + * multi_socket_client.c: code refine Version 1.40 2018-11-09 * add function conn_pool_parse_server_info and conn_pool_load_server_info diff --git a/src/multi_socket_client.c b/src/multi_socket_client.c index 8add649..98d1e54 100644 --- a/src/multi_socket_client.c +++ b/src/multi_socket_client.c @@ -138,6 +138,7 @@ static int fast_multi_sock_client_do_send(FastMultiSockClient *client, entry->remain -= bytes; if (entry->remain == 0) { entry->remain = client->header_length; //to recv pkg header + entry->recv_stage = fast_multi_sock_stage_recv_header; entry->io_callback = fast_multi_sock_client_do_recv; if (ioevent_modify(&client->ioevent, entry->conn->sock, IOEVENT_READ, entry) != 0) @@ -254,8 +255,10 @@ static int fast_multi_sock_client_do_recv(FastMultiSockClient *client, entry->recv_buffer.length += bytes; entry->remain -= bytes; - if (entry->remain == 0 && entry->recv_buffer.length == client->header_length) { + if (entry->remain == 0 && entry->recv_stage == fast_multi_sock_stage_recv_header) { int body_length; + + entry->recv_stage = fast_multi_sock_stage_recv_body; body_length = client->get_body_length_func(&entry->recv_buffer); if (body_length < 0) { logError("file: "__FILE__", line: %d, " @@ -265,6 +268,10 @@ static int fast_multi_sock_client_do_recv(FastMultiSockClient *client, result = EINVAL; break; } + else if (body_length == 0) { + break; + } + if ((result=fast_buffer_check(&entry->recv_buffer, body_length)) != 0) { break; } diff --git a/src/multi_socket_client.h b/src/multi_socket_client.h index 3762f35..3f6fb1b 100644 --- a/src/multi_socket_client.h +++ b/src/multi_socket_client.h @@ -22,9 +22,9 @@ #include "ioevent.h" typedef enum { - fast_multi_sock_stage_send = 'S', - fast_multi_sock_stage_recv = 'R' -} FastMultiSockStage; + fast_multi_sock_stage_recv_header = 'H', + fast_multi_sock_stage_recv_body = 'B' +} FastMultiSockRecvStage; struct fast_multi_sock_client; struct fast_multi_sock_entry; @@ -43,6 +43,7 @@ typedef struct fast_multi_sock_entry { FastBuffer recv_buffer; //recv buffer int error_no; //0 for success, != 0 fail int remain; //remain bytes, for internal use + FastMultiSockRecvStage recv_stage; bool done; //for internal use } FastMultiSockEntry;