Date: Mon, 29 Nov 2021 13:35:11 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=260116 Bug ID: 260116 Summary: [sctp] POLLOUT/EVFILT_WRITE is always true for poll/kqueue Product: Base System Version: 13.0-RELEASE Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: email@example.com It seems like POLLOUT/EVFILT_WRITE always is true for SCTP sockets even if the socket send buffer is full. Besides this, it should also account for SO_SNDLOWAT but it is possible that we will get this for "free" since it looks like the functionality already is there. Based on some experiments (which might be faulty), SCTP sockets doesn't use struct sockbuf in the same way as TCP uses it. A lot of the fields in that struct are 0 for SCTP sockets since it also has its own structs. This seems to affect filt_sowrite() in (https://github.com/freebsd/freebsd-src/blob/main/sys/kern/uipc_socket.c). More specifically, this line: kn->kn_data = sbspace(&so->so_snd); I have tested to replace that line with: kn->kn_data = (so->so_snd.sb_hiwat - so->so_snd.sb_acc); Which seems to do the trick, but I expect this to have side effects. -- You are receiving this mail because: You are the assignee for the bug.