首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LwIP原始API上的TCP服务器-询问tcp_close并接受回调

LwIP原始API上的TCP服务器-询问tcp_close并接受回调
EN

Stack Overflow用户
提问于 2018-09-28 22:59:18
回答 1查看 1.8K关注 0票数 0

我以简单回显服务器为例。它创建侦听连接,接收数据包,将其发回,然后关闭连接。

在初始化函数中,接受回调在lwip中注册,如下所示:

代码语言:javascript
复制
void
echo_init(void)
{
    echo_pcb = tcp_new();
    ...
    echo_pcb = tcp_listen(echo_pcb);
    tcp_accept(echo_pcb, echo_accept);

服务器在每个回送会话之后关闭连接,如下所示:

代码语言:javascript
复制
void
echo_close(struct tcp_pcb *tpcb, struct echo_state *es)
{
  tcp_arg(tpcb, NULL);
  tcp_sent(tpcb, NULL);
  tcp_recv(tpcb, NULL);
  tcp_err(tpcb, NULL);
  tcp_poll(tpcb, NULL, 0);

  if (es != NULL)
  {
    mem_free(es);
  }  
  tcp_close(tpcb);

文档tcp_close将释放pcb结构。用于tcp服务器的所有回调都是通过此结构注册的。

但是,当客户端发送新数据包并启动新连接时,接受回调将被调用!尽管tcp_accept(echo_pcb, echo_accept); (即回调注册)只在init函数中执行过一次,而且echo_pcb结构已经在tcp_close之后释放了。

所以我很困惑。为什么所有其他回调都多次注册,而accept只注册一次?这样做可以吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-05 21:29:56

好的,根据这个回答,对于lwip邮件列表上的同一个问题,这是正确的行为。tcp_accept为端口注册回调,在调用tcp_close时不会取消注册。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52563580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档