关于espconn_disconnect()的问题

stupiid
Posts: 6
Joined: Tue Feb 02, 2016 5:29 pm

关于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了。

请问这是什么原因?如何解决?

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: 关于espconn_disconnect()的问题

Postby ESP_Faye » Thu Feb 04, 2016 3:11 pm

您好,

麻烦提供您的测试代码以供分析。

感谢您对 ESP8266 的关注!

stupiid
Posts: 6
Joined: Tue Feb 02, 2016 5:29 pm

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);

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: 关于espconn_disconnect()的问题

Postby ESP_Faye » Tue Mar 08, 2016 9:42 am

您好,

麻烦基于 ESP8266_NONOS_SDK_V1.5.2 更新附件 lib 测试,给您带来不便,深感抱歉。

如果您的问题仍未解决,请再告知。
Attachments
liblwip_for_ESP8266_NONOS_SDK_V1.5.2.zip
(227.52 KiB) Downloaded 711 times

stupiid
Posts: 6
Joined: Tue Feb 02, 2016 5:29 pm

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);   //返回值正常
            }

现在这个新的库无需发送垃圾数据也能关闭连接,但效果类似强制中断的样子。

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: 关于espconn_disconnect()的问题

Postby ESP_Faye » Fri Mar 11, 2016 3:02 pm

您好,

我们测试是正常的断开流程,您能否换一个 TCP client 测试,或者多试几次以确认。
会不会是测试时,恰巧遇到网络状态不好等其他原因,导致异常断开。

Who is online

Users browsing this forum: No registered users and 14 guests