修复net公开API错误码被覆盖致UI推流连上即断(改用通知值回传,单连接EOF不关监听)

This commit is contained in:
2026-09-21 04:46:47 +08:00
parent 57632e910a
commit 5cb7614959
3 changed files with 54 additions and 15 deletions
+42 -8
View File
@@ -358,7 +358,11 @@ void net_process_messages(void) {
switch (msg.type) {
case NET_MSG_SEND: {
net_sock_t *p_sock = net_get_sock(msg.sockfd);
if (p_sock == NULL || p_sock->state != NET_SOCK_STATE_ESTABLISHED) {
if (p_sock == NULL) {
s_net_errno = NET_ERR_BADF;
msg.result = -1;
} else if (p_sock->state != NET_SOCK_STATE_ESTABLISHED) {
s_net_errno = NET_ERR_NOTCONN;
msg.result = -1;
} else {
msg.result = net_send_locked(p_sock, msg.buf, msg.len);
@@ -368,6 +372,7 @@ void net_process_messages(void) {
case NET_MSG_RECV: {
net_sock_t *p_sock = net_get_sock(msg.sockfd);
if (p_sock == NULL) {
s_net_errno = NET_ERR_BADF;
msg.result = -1;
} else {
msg.result = net_recv_locked(p_sock, msg.buf, msg.len, msg.flags);
@@ -377,6 +382,7 @@ void net_process_messages(void) {
case NET_MSG_CLOSE: {
net_sock_t *p_sock = net_get_sock(msg.sockfd);
if (p_sock == NULL) {
s_net_errno = NET_ERR_BADF;
msg.result = -1;
} else {
msg.result = net_close_locked(p_sock);
@@ -401,11 +407,21 @@ void net_process_messages(void) {
break;
}
default:
s_net_errno = NET_ERR; /* 未知消息类型:置通用错误码,保证回传值有效 */
msg.result = -1;
break;
}
xTaskNotify(msg.caller, (uint32_t)msg.result, eSetValueWithOverwrite);
/* 结果回传:成功时回传实际字节数/描述符;失败时回传具体错误码(如 NET_ERR_WOULDBLOCK)。
* 注意消息体是按值拷入队列的——调用方看不到 netTask 对 msg 的修改,错误码只能搭
* 通知值这趟车带回调用方,否则调用方只拿得到笼统的 NET_ERR,无法区分 WOULDBLOCK。 */
{
uint32_t notify_val = (uint32_t)msg.result;
if (msg.result < 0) {
notify_val = (uint32_t)((s_net_errno != 0) ? s_net_errno : NET_ERR);
}
xTaskNotify(msg.caller, notify_val, eSetValueWithOverwrite);
}
}
}
@@ -639,7 +655,10 @@ int net_listen(int sockfd) {
}
if (msg.result < 0) {
s_net_errno = NET_ERR;
/* netTask 把具体错误码(如 NET_ERR_WOULDBLOCK)以负值搭通知值回传,此处恢复为
* errno;对外仍保持 BSD 语义——失败一律返回 -1 */
s_net_errno = msg.result;
return -1;
}
return msg.result;
}
@@ -734,7 +753,10 @@ int net_accept(int sockfd, struct net_sockaddr *addr, int *addrlen) {
}
if (msg.result < 0) {
s_net_errno = NET_ERR;
/* netTask 把具体错误码(如 NET_ERR_WOULDBLOCK)以负值搭通知值回传,此处恢复为
* errno;对外仍保持 BSD 语义——失败一律返回 -1 */
s_net_errno = msg.result;
return -1;
}
return msg.result;
}
@@ -791,7 +813,10 @@ int net_connect(int sockfd, const struct net_sockaddr *addr, int addrlen) {
}
if (msg.result < 0) {
s_net_errno = NET_ERR;
/* netTask 把具体错误码(如 NET_ERR_WOULDBLOCK)以负值搭通知值回传,此处恢复为
* errno;对外仍保持 BSD 语义——失败一律返回 -1 */
s_net_errno = msg.result;
return -1;
}
return msg.result;
}
@@ -1197,7 +1222,10 @@ int net_send(int sockfd, const void *buf, int len, int flags) {
/* ---- 6. 结果回传:负数视为错误并设置线程级错误码;否则返回实际发送字节数 ---- */
if (msg.result < 0) {
s_net_errno = NET_ERR;
/* netTask 把具体错误码(如 NET_ERR_WOULDBLOCK)以负值搭通知值回传,此处恢复为
* errno;对外仍保持 BSD 语义——失败一律返回 -1 */
s_net_errno = msg.result;
return -1;
}
return msg.result;
}
@@ -1247,7 +1275,10 @@ int net_recv(int sockfd, void *buf, int len, int flags) {
}
if (msg.result < 0) {
s_net_errno = NET_ERR;
/* netTask 把具体错误码(如 NET_ERR_WOULDBLOCK)以负值搭通知值回传,此处恢复为
* errno;对外仍保持 BSD 语义——失败一律返回 -1 */
s_net_errno = msg.result;
return -1;
}
return msg.result;
}
@@ -1291,7 +1322,10 @@ int net_close(int sockfd) {
}
if (msg.result < 0) {
s_net_errno = NET_ERR;
/* netTask 把具体错误码(如 NET_ERR_WOULDBLOCK)以负值搭通知值回传,此处恢复为
* errno;对外仍保持 BSD 语义——失败一律返回 -1 */
s_net_errno = msg.result;
return -1;
}
return msg.result;
}