关于espconn_disconnect()的问题
关于espconn_disconnect()的问题
Postby stupiid » Wed Feb 03, 2016 2:03 pm
大家好。
我在调试tcp server时遇到了奇怪的问题,具体如下:
我在esp8266上建立了一个tcp server,将若干个client连接上该server。
如果所有client连接都未中断,则可以使用espconn_get_connection_info()获取server连接信息后调用espconn_disconnect()逐个关断所有连接;
一旦有任何一个client主动关闭连接,则进行以上操作调用espconn_disconnect()关闭剩余连接时返回错误值-5:ESPCONN_INPROGRESS, 无法关断,这也导致无法关闭tcp server。
一旦断开的client重新连上server,则又可以关闭所有连接和server了。
请问这是什么原因?如何解决?
我在调试tcp server时遇到了奇怪的问题,具体如下:
我在esp8266上建立了一个tcp server,将若干个client连接上该server。
如果所有client连接都未中断,则可以使用espconn_get_connection_info()获取server连接信息后调用espconn_disconnect()逐个关断所有连接;
一旦有任何一个client主动关闭连接,则进行以上操作调用espconn_disconnect()关闭剩余连接时返回错误值-5:ESPCONN_INPROGRESS, 无法关断,这也导致无法关闭tcp server。
一旦断开的client重新连上server,则又可以关闭所有连接和server了。
请问这是什么原因?如何解决?
Re: 关于espconn_disconnect()的问题
Postby stupiid » Mon Feb 15, 2016 8:43 am
Espressif_Faye wrote:您好,
麻烦提供您的测试代码以供分析。
感谢您对 ESP8266 的关注!
你好。这是关闭连接的代码。mconn_array[j]->conn是server的struct espconn *指针。
Code: Select all
uint8 count = 0;
remot_info *premot = NULL;
if (espconn_get_connection_info(mconn_array[j]->conn, &premot, 0) == ESPCONN_OK)
{
for (count = 0; count < mconn_array[j]->conn->link_cnt; count++)
{
mconn_array[j]->conn->proto.tcp->remote_port = premot[count].remote_port;
mconn_array[j]->conn->proto.tcp->remote_ip[0] = premot[count].remote_ip[0];
mconn_array[j]->conn->proto.tcp->remote_ip[1] = premot[count].remote_ip[1];
mconn_array[j]->conn->proto.tcp->remote_ip[2] = premot[count].remote_ip[2];
mconn_array[j]->conn->proto.tcp->remote_ip[3] = premot[count].remote_ip[3];
//ret = espconn_abort(mconn_array[j]->conn);
ret = espconn_disconnect(mconn_array[j]->conn);
}
}
espconn_delete(mconn_array[j]->conn);
Re: 关于espconn_disconnect()的问题
Postby ESP_Faye » Tue Mar 08, 2016 9:42 am
您好,
麻烦基于 ESP8266_NONOS_SDK_V1.5.2 更新附件 lib 测试,给您带来不便,深感抱歉。
如果您的问题仍未解决,请再告知。
麻烦基于 ESP8266_NONOS_SDK_V1.5.2 更新附件 lib 测试,给您带来不便,深感抱歉。
如果您的问题仍未解决,请再告知。
- Attachments
-
- liblwip_for_ESP8266_NONOS_SDK_V1.5.2.zip
- (227.52 KiB) Downloaded 711 times
Re: 关于espconn_disconnect()的问题
Postby stupiid » Tue Mar 08, 2016 5:50 pm
Espressif_Faye wrote:您好,
麻烦基于 ESP8266_NONOS_SDK_V1.5.2 更新附件 lib 测试,给您带来不便,深感抱歉。
如果您的问题仍未解决,请再告知。
感谢贵司的努力。粗略测试发现,这个库虽然解决了无法disconnect的问题,但是看上去好像是非正常关断,客户端貌似没有收到正确的结束包。
我用原来的库是这样解决的:发送1个byte的垃圾数据之后,可以正常关断连接:
Code: Select all
ret = espconn_disconnect(mconn_array[index]->conn); //永远返回-5
if(ret != 0)
{
uint8 shit = 0;
espconn_send(mconn_array[index]->conn, &shit, 1);
ret = espconn_disconnect(mconn_array[index]->conn); //返回值正常
}
现在这个新的库无需发送垃圾数据也能关闭连接,但效果类似强制中断的样子。
Who is online
Users browsing this forum: No registered users and 14 guests
Login
Newbies Start Here
Are you new to ESP8266?
Unsure what to do?
Dunno where to start?
Start right here!
Latest SDK
Documentation
Complete listing of the official ESP8266 related documentation release by ESPRESSIF!
Must read here!
- All times are UTC+08:00
- Top
- Delete all board cookies
About Us
Espressif Systems is a fabless semiconductor company providing cutting-edge low power WiFi SoCs and wireless solutions for wireless communications and Internet of Things applications. We are the manufacturer of ESP8266EX.