当前位置: 首页 > 知识库问答 >
问题:

LwIP原始API上的TCP服务器-关于tcp_close和接受回调的问题

戎高爽
2023-03-14

我使用这个简单的echo-server作为示例。它创建侦听连接,接收数据包,将其发送回,然后关闭连接。

在初始化函数中,accept callback在lwip中注册如下:

void
echo_init(void)
{
    echo_pcb = tcp_new();
    ...
    echo_pcb = tcp_listen(echo_pcb);
    tcp_accept(echo_pcb, echo_accept);
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);

共有1个答案

危卜鹰
2023-03-14

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

 类似资料:
  • 问题内容: 我正在尝试Go-并希望创建一个可以远程登录,发送命令和接收响应的TCP服务器。 上面的代码片段每次都会关闭连接,将我踢出终端会话。但是我真正想要的是能够保持连接打开以进行更多的I / O操作。如果我只是删除,则服务器似乎挂在某处,因为它不再获得任何响应。 我解决此问题的方法是让我的handleRequest方法无休止地循环,以便它在收到消息之前永远不会退出。这是否合适- 还是有更好的实

  • 我得到下面的错误,当做docker组成。该应用程序正在运行,但不能使任何api发布/获取请求。快速服务器正在使用端口5000。 ]尝试从localhost:3000代理请求/api/users/user时发生[HPM]错误http://localhost:5000/ (经济学)(https://nodejs.org/api/errors.html#errors_common_system_erro

  • 问题内容: 服务器已创建一个套接字并绑定到端口,并启动了一个正在循环以接受连接的线程。有时由于异常导致线程退出而退出了稍后的循环,但是套接字仍然绑定到端口。现在,如果客户端与该服务器建立“连接”,则说明连接成功。这怎么可能?如果我理解正确,则仅当服务器在侦听套接字上执行“接受”操作后,“连接”才返回。我在这里想念什么吗? 问题答案: 如果我理解正确,则仅当服务器在侦听套接字上执行“接受”操作后,“

  • ?> Swoole\Coroutine\Server 是一个完全协程化的类,用于创建协程TCP服务器,支持TCP和unixSocket类型。 与Server模块不同之处: 动态创建销毁,在运行时可以动态监听端口,也可以动态关闭服务器 处理连接的过程是完全同步的,程序可以顺序处理Connect、Receive、Close事件 !> 在4.4以上版本中可用 短命名 可使用Co\Server短名。 方法

  • 程序代码 server.php //创建Server对象,监听 127.0.0.1:9501端口 $serv = new Swoole\Server("127.0.0.1", 9501); //监听连接进入事件 $serv->on('Connect', function ($serv, $fd) { echo "Client: Connect.\n"; }); //监听数据接收事

  • Swoole\Network\Server 使用swoole扩展作为底层驱动 Swoole\Network\SelectTCP 使用PHP提供的stream_select作为事件驱动方式 Swoole\Network\BlockTCP 阻塞方式的TCP Swoole\Network\EventTCP libevent扩展作为底层驱动