xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
载入中...
搜索中...
未找到
非阻塞 Socket 多连接示例

平台 目标
lm620 r4f4

演示使用 lwIP 非阻塞 Socket 同时向 www.baidu.com 发起多个并发 TCP 连接,通过 select 事件驱动方式处理连接完成和可读事件。

预期行为

  1. 等待蜂窝网络就绪
  2. 创建消息队列和 handler_task 工作线程
  3. DNS 解析 www.baidu.com
  4. 批量创建 MAX_CONNECTIONS (默认 10 )个非阻塞 Socket,全部发起连接
  5. 在 select 循环中处理:
    • **异常事件**:关闭对应 Socket
    • **可写事件**(连接中):通过 SO_ERROR 确认连接成功,更新状态为已连接,发送 HEAD / HTTP/1.1 请求
    • **可读事件**(已连接):将 Socket 推入消息队列交给 handler_task 处理
  6. handler_task 接收 HTTP 响应头并打印,然后关闭 Socket
  7. 所有连接处理完毕后退出 select 循环

**日志输出示例**:

resolving domain: www.baidu.com
DNS resolved success.
--- Non-Blocking Multi-Connect (10) ---
fd[0] connecting in progress ...
...
--- Select Loop ---
[Event] fd[0]: connected!
[Loop] fd[0]: error, closing
[Event] fd[1]: is readable. sending to HANDLER, stopping monitor
[HANDLER] fd[1]: Rx Data (xxx bytes):
HTTP/1.1 200 OK
...

编译和运行

cd examples/network/socket-nonblock
xt --target lm620/r4f4 fullclean build

注意事项

  • 依赖 lwip 平台私有组件,仅支持 lm620 平台
  • 本示例使用 lwIP 原生 API( lwip_socket / lwip_fcntl / lwip_select 等),不是跨平台的 xt_socket(跨平台 Socket)
  • 可调整 MAX_CONNECTIONS (最大并发数)和 MSG_QUEUE_SIZE (消息队列深度)
  • 每个连接仅处理一次请求和响应,收到数据后即从 select 监控列表中移除