Я разрабатываю code, использующий API сокета LWIP для создания HTTP-сервера. При запуске codeа мне удается получить функцию чтения сокета только один раз, позже запрос на чтение не происходит, но при проверке в Wireshark отображается [RST,ACK] seq=1,ack =1 Win=65500 Len=0
Можно получить данные через сокет только один раз. После этого по TCP отправляется автоматическое сообщение о сбросе.
void HTTPServerTask(void *pvParameters)
{
int sockfd, new_sock;
struct sockaddr_in servaddr, cliaddr;
socklen_t cliaddr_len;
char recv_buffer[1024];
// Create socket
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
// Handle error
return;
}
// Initialize server address structure
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(HTTP_PORT);
// Bind the socket to the specified port
if (bind(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
{
// Handle error
return;
}
// Start listening for incoming connections
if (listen(sockfd, 5) < 0)
{
// Handle error
return;
}
while (1)
{
// Accept a new connection
cliaddr_len = sizeof(cliaddr);
new_sock = accept(sockfd, (struct sockaddr *)&cliaddr, &cliaddr_len);
if (new_sock < 0)
{
// Handle error
continue;
}
// Receive data (this can be the HTTP request from the client)
int len = recv(new_sock, recv_buffer, sizeof(recv_buffer), 0);
if (len > 0)
{
// Process and respond
send(new_sock, http_html, sizeof(http_html) - 1, 0);
}
// Close the connection
close(new_sock);
}
// Close the listening socket if needed (but typically not in a loop)
// close(sockfd);
}
Гаврила
Вопрос задан25 февраля 2024 г.