我尝试使用LwIP netconn API(在stm32f4发现板上)建立多个同时连接。所有这些都在他们自己的线程中并且完美地工作。但由于某种原因,只能同时建立一个连接。
我的代码基于ST echo服务器示例,如下所示:
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");
}
}
所有线程都在侦听不同的端口。但是,如果已经建立了另一个使用不同端口的连接,则所有其他线程都会在netconn_accept
失败。它返回ERR_ABRT
,表示a connection has been aborted: out of pcbs or out of netconns during accept
。
我在这里想念什么?
答案 0 :(得分:2)
确定。我找到了解决方案。 增加MEMP_NUM_NETBUF和MEMP_NUM_NETCONN使事情有效。