Skip to content

Commit 9c38441

Browse files
committed
Merge branch 'bugfix/fix_sc_send_failure_and_exit_issue_v4.4' into 'release/v4.4'
smartconfig: fix the issue of sending failure and exit (Backport v4.4) See merge request espressif/esp-idf!23025
2 parents 4b40411 + d52d1fc commit 9c38441

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

components/esp_wifi/src/smartconfig_ack.c

+12-2
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ static void sc_ack_send_task(void *pvParameters)
9292
port_bit = 0;
9393
}
9494
remote_port = SC_ACK_TOUCH_V2_SERVER_PORT(port_bit);
95+
memset(remote_ip, 0xFF, sizeof(remote_ip));
9596
} else {
9697
remote_port = SC_ACK_AIRKISS_SERVER_PORT;
9798
}
@@ -165,15 +166,24 @@ static void sc_ack_send_task(void *pvParameters)
165166
memcpy(remote_ip, &from.sin_addr, 4);
166167
server_addr.sin_addr.s_addr = from.sin_addr.s_addr;
167168
} else {
168-
goto _end;
169+
server_addr.sin_addr.s_addr = INADDR_BROADCAST;
169170
}
170171
}
171172

173+
uint32_t ip_addr = server_addr.sin_addr.s_addr;
172174
while (s_sc_ack_send) {
173175
/* Send smartconfig ACK every 100ms. */
174176
vTaskDelay(100 / portTICK_RATE_MS);
175177

176-
sendlen = sendto(send_sock, &ack->ctx, ack_len, 0, (struct sockaddr*) &server_addr, sin_size);
178+
if (ip_addr != INADDR_BROADCAST) {
179+
sendto(send_sock, &ack->ctx, ack_len, 0, (struct sockaddr*) &server_addr, sin_size);
180+
server_addr.sin_addr.s_addr = INADDR_BROADCAST;
181+
sendlen = sendto(send_sock, &ack->ctx, ack_len, 0, (struct sockaddr*) &server_addr, sin_size);
182+
server_addr.sin_addr.s_addr = ip_addr;
183+
} else {
184+
sendlen = sendto(send_sock, &ack->ctx, ack_len, 0, (struct sockaddr*) &server_addr, sin_size);
185+
}
186+
177187
if (sendlen <= 0) {
178188
err = sc_ack_send_get_errno(send_sock);
179189
ESP_LOGD(TAG, "send failed, errno %d", err);

0 commit comments

Comments
 (0)