FTP可以连接成功
This commit is contained in:
@@ -607,6 +607,9 @@ int lftpd_start(const char *directory, int port, lftpd_t *lftpd)
|
||||
handle_control_channel(&client);
|
||||
lftpd->client = NULL;
|
||||
|
||||
/* 等待 CH395F 稳定(Trap 09) */
|
||||
vTaskDelay(pdMS_TO_TICKS(200));
|
||||
|
||||
/* standalone mode: socket was closed in handle_control_channel,
|
||||
* loop back to create a new listener */
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user