From 4531f18f1dacf246bd1929e14306500ad7298f26 Mon Sep 17 00:00:00 2001 From: chenyong <1521761801@qq.com> Date: Fri, 2 Mar 2018 11:15:49 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9webclient=5Fopen=5Fposition?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E4=B8=AD=E7=9A=84=E5=86=85=E5=AD=98=E6=B3=84?= =?UTF-8?q?=E6=BC=8F=E9=97=AE=E9=A2=98.=202.=E4=BF=AE=E6=94=B9timeout?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E4=B8=BA=E7=BB=93=E6=9E=84=E4=BD=93=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenyong <1521761801@qq.com> --- webclient.c | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/webclient.c b/webclient.c index df8a341..6cc2b97 100644 --- a/webclient.c +++ b/webclient.c @@ -32,7 +32,7 @@ #include -#define WEBCLIENT_SOCKET_TIMEO 6000 /* 6 second */ +#define WEBCLIENT_SOCKET_TIMEO 6 /* 6 second */ extern long int strtol(const char *nptr, char **endptr, int base); @@ -590,7 +590,7 @@ int webclient_connect(struct webclient_session *session, const char *URI) { int rc = WEBCLIENT_OK; int socket_handle; - int timeout = WEBCLIENT_SOCKET_TIMEO; + struct timeval timeout; struct addrinfo *res = RT_NULL; //struct sockaddr_in server; char *request; @@ -599,6 +599,9 @@ int webclient_connect(struct webclient_session *session, const char *URI) /* initialize the socket of session */ session->socket = -1; + + timeout.tv_sec = WEBCLIENT_SOCKET_TIMEO; + timeout.tv_usec = 0; #ifdef WEBCLIENT_USING_TLS if(strncmp(URI, "https://", 8) == 0) @@ -803,8 +806,7 @@ struct webclient_session *webclient_open_position(const char *URI, int position) rt_strlen(range_header)) != WEBCLIENT_OK) { /* connect to webclient server failed. */ - webclient_close(session); - return RT_NULL; + goto __exit; } /* handle the response header of webclient server */ @@ -818,12 +820,20 @@ struct webclient_session *webclient_open_position(const char *URI, int position) webclient_close(session); session = webclient_open_position(location, position); - web_free(location); + if (range_header) + web_free(range_header); + + if(location) + web_free(location); + return session; } } /* open successfully */ + if (range_header) + web_free(range_header); + return session; __exit: @@ -876,11 +886,17 @@ int webclient_set_timeout(struct webclient_session *session, int millisecond) { RT_ASSERT(session != RT_NULL); + struct timeval timeout; + int second = rt_tick_from_millisecond(millisecond) / 1000 ; + + timeout.tv_sec = second; + timeout.tv_usec = 0; + /* set recv timeout option */ setsockopt(session->socket, SOL_SOCKET, SO_RCVTIMEO, - (void *) &millisecond, sizeof(millisecond)); + (void *) &timeout, sizeof(timeout)); setsockopt(session->socket, SOL_SOCKET, SO_SNDTIMEO, - (void *) &millisecond, sizeof(millisecond)); + (void *) &timeout, sizeof(timeout)); return 0; }