Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[edge-http]: Server doesn't seem to free handler after [FIN, ACK] from client. #62

Open
AnthonyGrondin opened this issue Feb 21, 2025 · 0 comments

Comments

@AnthonyGrondin
Copy link
Contributor

Using edge-net with esp-wifi and embassy-net, I'm noticing the following behaviour; When I make a curl request, without any closing headers, (Connection: Close), my client (curl) sends a [FIN, ACK] at the end of an HTTP request, which is acknowledged by an ACK from my esp32 but then the handler isn't freed and only is freed when the timeout is reached.

Here's a Wireshark log of a connection using curl, without any closing headers in the HTTP request:

  • Client: 192.168.11.50
  • Esp32: 192.168.11.1
    image

The issue is that the handler, which hasn't been liberated, isn't re-used if I immediately send another request with the same client, as it can be observed in the following logs:

INFO - [0] GET / HTTP/1.1
INFO - 200 OK: /
INFO - [1] GET / HTTP/1.1
INFO - 200 OK: /
INFO - Handler task 0: Closing connection due to inactivity
INFO - Handler task 1: Closing connection due to inactivity

Excerpts of my Cargo.toml:

esp-hal = { version = "0.23.1", features = ["unstable"] }
esp-wifi = { version = "0.12.0", features = ["wifi", "serde"] }
embassy-net = { version = "0.6.0", features = [
  "tcp",
  "udp",
  "dhcpv4",
  "dhcpv4-hostname",
  "dns",
  "medium-ethernet",
] }
smoltcp = { version = "0.12.0", default-features = false, features = [
  "multicast",
  "proto-ipv4",
  "socket-tcp",
  "socket-icmp",
  "socket-udp",
  "medium-ethernet",
  "proto-dhcpv4",
  "socket-raw",
  "socket-dhcpv4",
  "dns-max-server-count-2",
] }
edge-nal-embassy = "0.5.0"
edge-http = "0.5.0"

My server:

async fn http_server(
    stack: &'static edge_nal_embassy::Tcp<'static, 2, 4096, 4096>,
) -> Result<(), edge_http::io::Error<TcpError>> {
    let addr = "0.0.0.0:80";

    let acceptor = stack.bind(addr.parse().unwrap()).await.unwrap();

    let mut server = Server::<2, 4096, 16>::new();
    server
        .run(
            Some(15 * 1000),
            acceptor,
            Handler,
        )
        .await
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant