esp32 tcpclient
int tcp_client() { char rx_buffer[128]; char host_ip[] = HOST_IP_ADDR; int addr_family = 0; int ip_protocol = 0; while (1) { struct sockaddr_in dest_addr; inet_pton(AF_INET, host_ip, &dest_addr.sin_addr); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(CLIENTPORT); addr_family = AF_INET; ip_protocol = IPPROTO_IP; int sock = socket(addr_family, SOCK_STREAM, ip_protocol); if (sock < 0) { ESP_LOGE(TAG, "Unable to create socket: errno %d", errno); break; } ESP_LOGI(TAG, "Socket created, connecting to %s:%d", host_ip, CLIENTPORT); int err = connect(sock, (struct sockaddr *)&dest_addr, sizeof(dest_addr)); if (err != 0) { ESP_LOGE(TAG, "Socket unable to connect: errno %d", errno); s_sta_is_connected = false; break; } else { s_sta_is_connected = true; ESP_LOGI(TAG, "Successfully connected"); // return sock; } while(1) { fd_set reads; FD_ZERO(&reads); FD_SET(sock, &reads); struct timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 100000; if (select(sock+1, &reads, 0, 0, &timeout) < 0) { ESP_LOGI(TAG, "select() failed.\n"); } if (FD_ISSET(sock, &reads)) { char read[1024]; int bytes_received = recv(sock, read, 1024, 0); if (bytes_received < 1) { printf("Connection closed by peer.\n"); break; } printf("Received (%d bytes): %.*s", bytes_received, bytes_received, read); } if (FD_ISSET(0, &reads)) { char read[1024]; if (!fgets(read, 1024, stdin)) break; printf("Sending: %s", read); int bytes_sent = send(sock, read, strlen(read), 0); printf("Sent %d bytes.\n", bytes_sent); } } return sock; if (sock != -1) { ESP_LOGE(TAG, "Shutting down socket and restarting..."); shutdown(sock, 0); close(sock); return -1; } } return 0; }