请问 AT-SAL,recv() 函数在服务端断开之后没有返回,是设计如此吗?

发布于 2021-01-18 16:59:06

在服务端断开 socket 连接,单片机模块(client)接收到 AT 串口的 +QIURC: "closed",0\r\n 推送,然后运行到 at_closed_notice_cb() 函数,函数中设置 sock->state = AT_SOCKET_CLOSED;。但是 recv() 函数依然在 at_recvfrom() 中的 rt_sem_take(sock->recv_notice, timeout) < 0 无限等待,请问这是设计原意吗?

查看更多

关注者
0
被浏览
130
1 个回答
xiangxistu
xiangxistu 2021-01-19

在收到 closed 之后,应该是做了两件事情;

  1. 设置状态为 AT_SOCKET_CLOSED
  2. 释放 sock->recv_notice 信号量

如果严格按照 socket 的编程步骤,不应该出现仍然挂在 recvfrom 上的情况。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览