Description
socket2
cannot currently handle the TCP urgent flag correctly according to specifications. Per https://www.rfc-editor.org/rfc/rfc1122#page-84 and https://www.rfc-editor.org/rfc/rfc6093#page-5, the intended standard method of handling the urgent flag in TCP is to notify the process out-of-band that there is an urgent mark, at which point the process moves into an "urgent mode" until reaching the urgent mark in-band. socket2
is currently missing the ability for the process to detect when it has reached the urgent mark.
While #296 suggests that polling is out-of-scope for socket2
, this shouldn't be necessary for implementing this functionality. Using the POSIX socket API, a process can set SO_OOBINLINE
as a socket option (to which set_out_of_band_inline()
is equivalent) and use sockatmark()
to detect when the urgent mark is reached, independent of polling mechanism.
The SIOCATMARK
ioctl
is the basis of sockatmark()
and could be consumed by socket2
to provide this functionality. rust-lang/libc#3275 intends to expose this for Unix-like systems and it is exposed in the WinSock Rust crate. A synchronous function is_at_urgent_mark(&self) -> bool
or similar would address this gap.