FTP可以连接成功

This commit is contained in:
2026-07-21 22:42:39 +08:00
parent 75cf4c9fbf
commit 46a74f24f3
6 changed files with 298 additions and 41 deletions

View File

@@ -38,6 +38,7 @@ static net_sock_t s_net_socks[NET_MAX_SOCKETS]; /* Socket 控制块数组 */
static int s_net_errno = 0; /* 最后错误码 */
static uint8_t s_net_initialized = 0; /* 初始化标志 */
static uint8_t s_local_ip[4]; /* 本机 IP 缓存网络序net_getsockname 用) */
static uint16_t s_dynamic_port = 49152; /* 动态端口分配起始值 */
/*
* 消息队列 - 线程安全核心
@@ -431,6 +432,15 @@ int net_bind(int sockfd, const struct net_sockaddr *addr, int addrlen) {
/* 设置本地端口(转换为主机序) */
p_sock->local_port = net_ntohs(p_addr_in->sin_port);
/* port=0 时自动分配动态端口49152~65535 */
if (p_sock->local_port == 0) {
p_sock->local_port = s_dynamic_port;
s_dynamic_port++;
if (s_dynamic_port > 65535) {
s_dynamic_port = 49152;
}
}
/* UDP (SOCK_DGRAM): 直接在此打开 CH395F Socket */
if (p_sock->type == NET_SOCK_DGRAM) {
uint8_t status;
@@ -595,7 +605,12 @@ static int net_accept_locked(int sockfd, struct net_sockaddr *addr, int *addrlen
int i;
p_listen_sock = &s_net_socks[sockfd];
if (!p_listen_sock->in_use || p_listen_sock->state != NET_SOCK_STATE_LISTENING) {
if (!p_listen_sock->in_use) {
s_net_errno = NET_ERR_INVAL;
return -1;
}
if (p_listen_sock->state != NET_SOCK_STATE_LISTENING &&
!(p_listen_sock->standalone_accept && p_listen_sock->state == NET_SOCK_STATE_ESTABLISHED)) {
s_net_errno = NET_ERR_INVAL;
return -1;
}
@@ -1461,7 +1476,7 @@ static void handle_disconnect_event(net_sock_t *p_sock) {
memset(p_sock->remote_ip_arr, 0, 4);
p_sock->remote_port = 0;
p_sock->send_ready = 1;
} else {
} else if (p_sock->state != NET_SOCK_STATE_CLOSED) {
/* 未预期的断开 */
DBG_ERROR("sock%d disconnect in state %d", p_sock->ch395_sock, p_sock->state);
fire_event(p_sock, NET_EVENT_DISCONNECTED);