mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-10-16 23:40:13 +08:00
Complete some error handling when send or receive function returns a value is zero.
This commit is contained in:
@@ -10,6 +10,7 @@ void tcpclient(const char* url, int port)
|
||||
char *recv_data;
|
||||
struct hostent *host;
|
||||
int sock, bytes_received;
|
||||
int ret;
|
||||
struct sockaddr_in server_addr;
|
||||
|
||||
/* 通过函数入口参数url获得host地址(如果是域名,会做域名解析) */
|
||||
@@ -56,15 +57,19 @@ void tcpclient(const char* url, int port)
|
||||
{
|
||||
/* 从sock连接中接收最大BUFSZ - 1字节数据 */
|
||||
bytes_received = recv(sock, recv_data, BUFSZ - 1, 0);
|
||||
if (bytes_received <= 0)
|
||||
if (bytes_received < 0)
|
||||
{
|
||||
/* 接收失败,关闭这个连接 */
|
||||
lwip_close(sock);
|
||||
|
||||
rt_kprintf("\nreceived error,close the socket.\r\n");
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
}
|
||||
}else if (bytes_received == 0)
|
||||
{
|
||||
/* 打印recv函数返回值为0的警告信息 */
|
||||
rt_kprintf("\nReceived warning,recv function return 0.\r\n");
|
||||
}
|
||||
|
||||
/* 有接收到数据,把末端清零 */
|
||||
recv_data[bytes_received] = '\0';
|
||||
@@ -73,7 +78,7 @@ void tcpclient(const char* url, int port)
|
||||
{
|
||||
/* 如果是首字母是q或Q,关闭这个连接 */
|
||||
lwip_close(sock);
|
||||
|
||||
rt_kprintf("\n got a 'q' or 'Q',close the socket.\r\n");
|
||||
/* 释放接收缓冲 */
|
||||
rt_free(recv_data);
|
||||
break;
|
||||
@@ -85,7 +90,18 @@ void tcpclient(const char* url, int port)
|
||||
}
|
||||
|
||||
/* 发送数据到sock连接 */
|
||||
send(sock,send_data,strlen(send_data), 0);
|
||||
ret = send(sock,send_data,strlen(send_data), 0);
|
||||
if (ret < 0)
|
||||
{
|
||||
/* 接收失败,关闭这个连接 */
|
||||
lwip_close(sock);
|
||||
rt_kprintf("\nsend error,close the socket.\r\n");
|
||||
break;
|
||||
}else if (ret == 0)
|
||||
{
|
||||
/* 打印send函数返回值为0的警告信息 */
|
||||
rt_kprintf("\n Send warning,send function return 0.\r\n");
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
|
Reference in New Issue
Block a user