smoltcp-rs / smoltcp

a smol tcp/ip stack
BSD Zero Clause License
3.63k stars 402 forks source link

[Feature Request] Resize TCP socket buffer dynamically after TCP socket has been created #927

Open XOR-op opened 1 month ago

XOR-op commented 1 month ago

Currently, the buffer for TCP socket needs to be preallocated in socket::tcp::Socket::new() and I found nowhere to change its size. However, a configurable window size is necessary to achieve a balance between good bandwidth and low memory footprint. I notice that TCP window scaling (RFC 1323) is advertised to be implemented but it seems it's only properly implemented for the remote endpoint. Can this feature be implemented in local side?

Dirbaio commented 1 month ago

I'm not sure what feature you're requesting:

XOR-op commented 1 month ago

Thanks for your replying. What I want to achieve is the following:

Is this already possible?

Dirbaio commented 1 month ago

ah okay! you want to dynamically change the buffer size after the TCP socket has already been created. Makes sense.

Unfortunately that's not possible now, no. Doing it if the buffer is borrowed might be hard, but should be doable if it's an owned Vec.

XOR-op commented 1 month ago

Then can we add such an API for sockets with owned Vec or Socket<'static> such as

fn replace_recv_buf<T: Into<SocketBuffer<'static>>(&mut self, new_buffer: T)->Option<SocketBuffer<'static>>

? Enabling this feature will be helpful to memory-constraint devices with skewed bandwidth needs.

Dirbaio commented 1 month ago

sure! pull reuquests welcome