From 9bee7ad62b60e15941232720169f840bf02cb3d1 Mon Sep 17 00:00:00 2001 From: YuQing <384681@qq.com> Date: Mon, 7 Sep 2020 21:46:07 +0800 Subject: [PATCH] add SF_NIO_STAGE_HANDSHAKE after connect --- src/sf_define.h | 11 ++++++----- src/sf_nio.c | 16 ++++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/sf_define.h b/src/sf_define.h index bfdc15c..d4ef901 100644 --- a/src/sf_define.h +++ b/src/sf_define.h @@ -11,11 +11,12 @@ #define SF_DEF_MAX_BUFF_SIZE (64 * 1024) #define SF_NIO_STAGE_INIT 0 //set ioevent -#define SF_NIO_STAGE_CONNECT 1 //do connect -#define SF_NIO_STAGE_RECV 2 //do recv -#define SF_NIO_STAGE_SEND 3 //do send -#define SF_NIO_STAGE_FORWARDED 4 //deal the forwarded request -#define SF_NIO_STAGE_CONTINUE 5 //notify the thread continue deal +#define SF_NIO_STAGE_CONNECT 1 //do connect (client only) +#define SF_NIO_STAGE_HANDSHAKE 2 //notify the thread to handshake (client only) +#define SF_NIO_STAGE_RECV 3 //do recv +#define SF_NIO_STAGE_SEND 4 //do send +#define SF_NIO_STAGE_FORWARDED 5 //deal the forwarded request +#define SF_NIO_STAGE_CONTINUE 6 //notify the thread continue deal #define SF_NIO_STAGE_CLOSE 9 //cleanup the task #ifdef __cplusplus diff --git a/src/sf_nio.c b/src/sf_nio.c index ba6e2e3..64f54c7 100644 --- a/src/sf_nio.c +++ b/src/sf_nio.c @@ -184,9 +184,8 @@ static int sf_client_sock_connect(int sock, short event, void *arg) return -1; } - task->nio_stage = SF_NIO_STAGE_RECV; - task->event.callback = (IOEventCallback)sf_client_sock_read; - return 0; + task->nio_stage = SF_NIO_STAGE_HANDSHAKE; + return SF_CTX->deal_task(task); } static int sf_connect_server(struct fast_task_info *task) @@ -202,9 +201,14 @@ static int sf_connect_server(struct fast_task_info *task) result = asyncconnectserverbyip(task->event.fd, task->server_ip, task->port); if (result == 0) { - task->nio_stage = SF_NIO_STAGE_RECV; - return sf_ioevent_add(task, (IOEventCallback) - sf_client_sock_read, task->network_timeout); + if ((result=sf_ioevent_add(task, (IOEventCallback) + sf_client_sock_read, task->network_timeout)) != 0) + { + return result; + } + + task->nio_stage = SF_NIO_STAGE_HANDSHAKE; + return SF_CTX->deal_task(task); } else if (result == EINPROGRESS) { return sf_ioevent_add(task, (IOEventCallback) sf_client_sock_connect, task->connect_timeout);