Page 1 of 1

【已解决】【网关】【TuyaOS SDK】网关程序运行后,程序打开的文件一直增加,APP打开时socket报错

Posted: 2023年 Feb 17日 16:56
by 18625210969

1) 开发包全名:
tuyaos-gw-integrated_3.5.6_ssd201_eth-wifi-gw-com_0.0.1.tar.gz
2) 问题现象
程序已经完成了WIFI配网,打开涂鸦APP后,log显示socket fail之类的报错,增加打印信息,发现为:Too many open files,
于是重启网关程序,使用lsof查看网关程序打开的文件数,发现一直增加,最终到1023,我把自己的创建的线程关掉也是一直增加。
3) 操作流程
如上。
4) 问题时间
2023-02-17

Dingtalk_20230217164545.jpg
Dingtalk_20230217164205.jpg

Re: 【求助】【网关】【TuyaOS SDK】网关程序运行后,程序打开的文件一直增加,APP打开时socket报错

Posted: 2023年 Feb 17日 17:17
by Kyson

提供的 DEMO 仅供参考,不确定你是否直接使用适配好的 TKL?目前看 tkl_wifi 中 __wifi_status 接口存在没关闭文件描述符,你可以修改试试看。

Code: Select all

STATIC BOOL_T __wifi_status(VOID)
{
    FILE *fp = NULL;
    CHAR_T buf[512] = {0};
    WF_STATION_STAT_E stat = 0;

    fp = popen("wpa_cli -i " WLAN_DEV " status", "r");
    if (fp == NULL) {
        return FALSE;
    }

    while (fgets(buf, SIZEOF(buf), fp)) {
        if (!strstr(buf, "wpa_state"))
            continue;

        char *k = strtok(buf, "=");
        char *v = strtok(NULL, "=");
        if (v && !strncmp(v, "COMPLETED", strlen("COMPLETED"))) {
            tkl_wifi_station_get_status(&stat);
            if (stat == WSS_GOT_IP) {
                pclose(fp);
                return TRUE;
            }
        }
    }

    pclose(fp);

    return FALSE;
}

Re: 【求助】【网关】【TuyaOS SDK】网关程序运行后,程序打开的文件一直增加,APP打开时socket报错

Posted: 2023年 Feb 17日 17:48
by 18625210969

感谢,正常了!您怎么做到这么快发现的?佩服!

Dingtalk_20230217174721.jpg

Re: 【已解决】【网关】【TuyaOS SDK】网关程序运行后,程序打开的文件一直增加,APP打开时socket报错

Posted: 2023年 Feb 17日 18:44
by Kyson

因为这么块就耗光文件描述符,猜测是频繁访问的接口有泄露,有线和无线会一直检测连接状态,所以重点 review 这块代码。 :D :D :D