From 2c39cfefef4ea0ed54540f712a06edb24d480a2d Mon Sep 17 00:00:00 2001 From: zhanghongyu Date: Tue, 12 Sep 2023 22:17:44 +0800 Subject: [PATCH] psock_tcp_cansend: return EWOULDBLOCK when send buffer is full with nonblocking sockets, POLLOUT is returned when the application calls poll even if the send buffer is full Signed-off-by: zhanghongyu --- net/tcp/tcp_send_buffered.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/tcp/tcp_send_buffered.c b/net/tcp/tcp_send_buffered.c index 8c480a231f..cf940d82f6 100644 --- a/net/tcp/tcp_send_buffered.c +++ b/net/tcp/tcp_send_buffered.c @@ -1677,7 +1677,11 @@ int psock_tcp_cansend(FAR struct tcp_conn_s *conn) * but we don't know how many more. */ - if (tcp_wrbuffer_test() < 0 || iob_navail(true) <= 0) + if (tcp_wrbuffer_test() < 0 || iob_navail(true) <= 0 +#if CONFIG_NET_SEND_BUFSIZE > 0 + || tcp_wrbuffer_inqueue_size(conn) >= conn->snd_bufs +#endif + ) { return -EWOULDBLOCK; }