RAK439 STA模式作服务端



  • RAK439 在STA模式下作服务端,执行到

    int RAK_TcpSRecvClients(int sever_fd, RW_APP_CTX* app_ctx)
      {
         SOCKADDR_IN     new_tcpinfo;
         int             ret = 0;
         int             info_size;
         int             sockfd;
         int             i= 0;
       
    ret = select(sever_fd, 1); //执行到此处,返回-14.
    if (ret == RW_ERR || ret == RW_ERR_TIME_OUT) 
    {
        return ret;
    }
    
    sockfd = accept(sever_fd, (SOCKADDR_IN *)&new_tcpinfo,  &info_size);   //the socket as non blocking  //执行到此处,返回-14.
    if (sockfd > 0 )
    {
      for(i=0; i<ALLOW_MAX_NUMS; i++)
      {
        if(app_ctx->ltcps_clientinfos[i].tcpc_sockfd == -1)
        {
          app_ctx->ltcps_clientinfos[i].tcpc_sockfd =sockfd; 
          app_ctx->ltcps_clientinfos[i].tcpc_info.sin_addr = ntohl(new_tcpinfo.sin_addr);
          app_ctx->ltcps_clientinfos[i].tcpc_info.sin_port = ntohs(new_tcpinfo.sin_port);
          app_ctx->ltcps_clientinfos[i].tcpc_info.sin_family = ntohs(new_tcpinfo.sin_family);
          app_ctx->tcpc_num++;
          break;
        }
      }
      if(i == ALLOW_MAX_NUMS)
      {
    //         DPRINTF("recv too many  connections close it \n\r");
        close(sockfd);
      }             
    }
    else if (sockfd == RW_ERR || sockfd == RW_ERR_TIME_OUT || ret 
    ==RW_ERR_SOCKET_INVAILD) 
    {
        return sockfd;
    }
    
    return RW_OK;
    }
    

    请问注释的地方,在无客户端连接过来的时候,一直 返回-14.

    还有 ret = select(sever_fd, 1); 现在超时时间是1ms,是不是时间改长一些,更稳定。



  • 没有客户端连接,一直返回-14是正常的。不需要修改时间。



  • RAK_TcpServer_EventHandle()这个函数执行频率比较高。是不是间隔一定的ms,更好。



  • 这个时间是越短越好。select这个函数会阻塞,时间太长,不能执行其他的功能。



  • rw_appdemo_context_init();
    rw_sysDriverReset();

    执行此段代码之前是不是最好是执行一下以下代码比较稳定一点。

    void closeltcps_sockfd(void) //此函数是自已编辑的。
    {
    int i=0;

    if (app_demo_ctx.tcpc_num > 0)
    {
    	for (i=0; i< ALLOW_MAX_NUMS; i++)
    	{
    		if (app_demo_ctx.ltcps_clientinfos[i].tcpc_sockfd ==INVAILD_SOCK_FD)
    			 continue;
    
    		close(app_demo_ctx.ltcps_clientinfos[i].tcpc_sockfd);
    		app_demo_ctx.ltcps_clientinfos[i].tcpc_sockfd =INVAILD_SOCK_FD;
    		app_demo_ctx.tcpc_num --;
    		app_demo_ctx.ltcps_clientinfos[i].loopback_count = 0;
    	}
    }
    close(app_demo_ctx.ltcps_sockfd);
    

    }


登录后回复
 

与 RAK支持中心 的连接断开,我们正在尝试重连,请耐心等待