写点什么

lwip_recv_tcp 阻塞读取数据代码

作者:linux大本营
  • 2023-04-20
    湖南
  • 本文字数:544 字

    阅读完需:约 2 分钟

以下是使用 lwip 库中的 lwip_recv_tcp 函数进行阻塞读取数据的代码:


err_t lwip_recv_tcp(struct netconn *conn, void *buf, size_t buflen) {    err_t err;    u16_t len;    struct netbuf *buf_ptr;
do { err = netconn_recv_tcp_pbuf(conn, &buf_ptr); if (err == ERR_OK) { len = netbuf_copy(buf, buf_ptr); netbuf_delete(buf_ptr); return len; } if (err != ERR_TIMEOUT && err != ERR_WOULDBLOCK) { return err; } } while (err != ERR_OK);
return ERR_OK;}
复制代码


这段代码使用一个 do-while 循环,不断调用 netconn_recv_tcp_pbuf 函数读取 TCP 连接的数据。如果数据读取成功,将调用 netbuf_copy 函数将读取的数据复制到指定的缓冲区中,然后删除 netbuf 对象并返回读取的数据长度。


如果在读取数据时发生阻塞,则会等待一段时间,然后再次尝试读取数据。如果超时或出现错误,函数将返回适当的错误码。


需要注意的是,这是一种阻塞读取数据的方式,并且只适用于单个 TCP 连接。如果需要同时监听多个 TCP 连接,请考虑使用多线程或事件驱动的方式来处理接收数据。


相关技术视频教程:c/c++ linux服务器开发/后台架构师免费学习地址

c/c++后端技术交流群:812855908

用户头像

还未添加个人签名 2020-11-26 加入

C/C++linux服务器开发群 812855908

评论

发布
暂无评论
lwip_recv_tcp阻塞读取数据代码_TCP_linux大本营_InfoQ写作社区