forked from espressif/esp-idf
iperf: support iperf break after tcp tx send timeout
This commit is contained in:
18
examples/common_components/iperf/Kconfig.projbuild
Normal file
18
examples/common_components/iperf/Kconfig.projbuild
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
menu "Iperf Configuration"
|
||||||
|
|
||||||
|
config IPERF_SOCKET_RX_TIMEOUT
|
||||||
|
int "iperf socket TCP/UDP rx timeout in seconds"
|
||||||
|
default 10
|
||||||
|
help
|
||||||
|
The value is used for iperf socket TCP/UDP rx timeout, iperf will be aborted
|
||||||
|
and socket will be closed and shutdown.
|
||||||
|
|
||||||
|
config IPERF_SOCKET_TCP_TX_TIMEOUT
|
||||||
|
int "iperf socket TCP tx timeout in seconds"
|
||||||
|
default 10
|
||||||
|
help
|
||||||
|
The value is used for iperf socket TCP tx timeout, iperf will be aborted
|
||||||
|
and socket will be closed and shutdown.
|
||||||
|
|
||||||
|
|
||||||
|
endmenu
|
@@ -49,7 +49,8 @@ extern "C" {
|
|||||||
|
|
||||||
#define IPERF_MAX_DELAY 64
|
#define IPERF_MAX_DELAY 64
|
||||||
|
|
||||||
#define IPERF_SOCKET_RX_TIMEOUT 10
|
#define IPERF_SOCKET_RX_TIMEOUT CONFIG_IPERF_SOCKET_RX_TIMEOUT
|
||||||
|
#define IPERF_SOCKET_TCP_TX_TIMEOUT CONFIG_IPERF_SOCKET_TCP_TX_TIMEOUT
|
||||||
#define IPERF_SOCKET_ACCEPT_TIMEOUT 5
|
#define IPERF_SOCKET_ACCEPT_TIMEOUT 5
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@@ -248,9 +248,6 @@ static esp_err_t IRAM_ATTR iperf_run_tcp_server(void)
|
|||||||
err = listen(listen_socket, 1);
|
err = listen(listen_socket, 1);
|
||||||
ESP_GOTO_ON_FALSE((err == 0), ESP_FAIL, exit, TAG, "Error occurred during listen: errno %d", errno);
|
ESP_GOTO_ON_FALSE((err == 0), ESP_FAIL, exit, TAG, "Error occurred during listen: errno %d", errno);
|
||||||
|
|
||||||
timeout.tv_sec = IPERF_SOCKET_RX_TIMEOUT;
|
|
||||||
setsockopt(listen_socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
|
|
||||||
|
|
||||||
memcpy(&listen_addr, &listen_addr6, sizeof(listen_addr6));
|
memcpy(&listen_addr, &listen_addr6, sizeof(listen_addr6));
|
||||||
} else if (s_iperf_ctrl.cfg.type == IPERF_IP_TYPE_IPV4) {
|
} else if (s_iperf_ctrl.cfg.type == IPERF_IP_TYPE_IPV4) {
|
||||||
listen_addr4.sin_family = AF_INET;
|
listen_addr4.sin_family = AF_INET;
|
||||||
@@ -272,6 +269,8 @@ static esp_err_t IRAM_ATTR iperf_run_tcp_server(void)
|
|||||||
memcpy(&listen_addr, &listen_addr4, sizeof(listen_addr4));
|
memcpy(&listen_addr, &listen_addr4, sizeof(listen_addr4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeout.tv_sec = IPERF_SOCKET_RX_TIMEOUT;
|
||||||
|
setsockopt(listen_socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
|
||||||
client_socket = accept(listen_socket, (struct sockaddr *)&remote_addr, &addr_len);
|
client_socket = accept(listen_socket, (struct sockaddr *)&remote_addr, &addr_len);
|
||||||
ESP_GOTO_ON_FALSE((client_socket >= 0), ESP_FAIL, exit, TAG, "Unable to accept connection: errno %d", errno);
|
ESP_GOTO_ON_FALSE((client_socket >= 0), ESP_FAIL, exit, TAG, "Unable to accept connection: errno %d", errno);
|
||||||
ESP_LOGI(TAG, "accept: %s,%d\n", inet_ntoa(remote_addr.sin_addr), htons(remote_addr.sin_port));
|
ESP_LOGI(TAG, "accept: %s,%d\n", inet_ntoa(remote_addr.sin_addr), htons(remote_addr.sin_port));
|
||||||
@@ -315,6 +314,7 @@ static esp_err_t iperf_run_tcp_client(void)
|
|||||||
struct sockaddr_storage dest_addr = { 0 };
|
struct sockaddr_storage dest_addr = { 0 };
|
||||||
struct sockaddr_in6 dest_addr6 = { 0 };
|
struct sockaddr_in6 dest_addr6 = { 0 };
|
||||||
struct sockaddr_in dest_addr4 = { 0 };
|
struct sockaddr_in dest_addr4 = { 0 };
|
||||||
|
struct timeval timeout = { 0 };
|
||||||
|
|
||||||
ESP_GOTO_ON_FALSE((s_iperf_ctrl.cfg.type == IPERF_IP_TYPE_IPV6 || s_iperf_ctrl.cfg.type == IPERF_IP_TYPE_IPV4), ESP_FAIL, exit, TAG, "Ivalid AF types");
|
ESP_GOTO_ON_FALSE((s_iperf_ctrl.cfg.type == IPERF_IP_TYPE_IPV6 || s_iperf_ctrl.cfg.type == IPERF_IP_TYPE_IPV4), ESP_FAIL, exit, TAG, "Ivalid AF types");
|
||||||
|
|
||||||
@@ -342,7 +342,8 @@ static esp_err_t iperf_run_tcp_client(void)
|
|||||||
ESP_LOGI(TAG, "Successfully connected");
|
ESP_LOGI(TAG, "Successfully connected");
|
||||||
memcpy(&dest_addr, &dest_addr4, sizeof(dest_addr4));
|
memcpy(&dest_addr, &dest_addr4, sizeof(dest_addr4));
|
||||||
}
|
}
|
||||||
|
timeout.tv_sec = IPERF_SOCKET_TCP_TX_TIMEOUT;
|
||||||
|
setsockopt(client_socket, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
|
||||||
|
|
||||||
#if CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS
|
#if CONFIG_ESP_WIFI_ENABLE_WIFI_RX_STATS
|
||||||
wifi_cmd_clr_rx_statistics(0, NULL);
|
wifi_cmd_clr_rx_statistics(0, NULL);
|
||||||
|
Reference in New Issue
Block a user