2017-07-19 8 views
1

Je tente d'établir plusieurs connexions simultanées à l'aide de l'API LwIP netconn (sur la carte de découverte stm32f4). Tous sont dans leur propre fil et fonctionnent parfaitement. Mais pour une raison quelconque, une seule connexion peut être établie en même temps.Gestion de plusieurs connexions LwIP en même temps à l'aide de netconn

Mon code est basé sur exemple de serveur d'écho ST et ressemble à ceci:

void myTaskStart(void const * argument) 
{ 
    struct netconn *conn, *newconn; 
    err_t err, accept_err; 
    struct netbuf* buf; 
    void* data; 
    u16_t len; 
    err_t recv_err; 

    /* Create a new connection identifier. */ 
    conn = netconn_new(NETCONN_TCP); 
    if (conn != NULL) 
    { 
     err = netconn_bind(conn, NULL, <some port>); 

     if (err == ERR_OK) 
     { 
      /* Tell connection to go into listening mode. */ 
      netconn_listen(conn); 

      while (1) 
      { 
       /* Grab new connection. */ 
       accept_err = netconn_accept(conn, &newconn); 

       /* Process the new connection. */ 
       if (accept_err == ERR_OK) 
       { 
         <do stuff here> 

        netconn_close(newconn); 
        netconn_delete(newconn); 
       } 
      } 
     } 
     else 
     { 
      netconn_delete(newconn); 
      printf(" can not bind TCP netconn"); 
     } 
    } 
    else 
    { 
     printf("can not create TCP netconn"); 
    } 
} 

Tous les sujets sont à l'écoute des ports différents. Mais si une autre connexion qui utilise un port différent a déjà été établie, tous les autres threads échouent à netconn_accept. Il renvoie ERR_ABRT, ce qui signifie a connection has been aborted: out of pcbs or out of netconns during accept. Qu'est-ce qui me manque ici?

Répondre

1

Ok. J'ai trouvé la solution. L'augmentation MEMP_NUM_NETBUF et MEMP_NUM_NETCONN a fait que les choses fonctionnent.