Reading is possible with IP_RECVTOS on Linux but requires the use of recvmsg, because the TOS field is provided as ancillary data. This wouldn't be very portable though. Raw sockets with IP_HDRINCL are a better option if portability is a concern.
On Wednesday, August 5, 2020 at 11:33:41 PM UTC+2 ma...@acln.ro wrote: > ECN bits are represented in the TOS field. I think you can use setsockopt > with the IP_TOS option to set the TOS field on a socket. See ip(7). On the > Go side, use the SyscallConn method on your UDPConn, then call setsockopt > using the Control method. Something like this (untested): > https://play.golang.org/p/6_R-zlBSibv > > On Wed, Aug 5, 2020 at 9:30 PM <marten...@gmail.com> wrote: > >> I'm working on a Go implementation of the QUIC protocol ( >> https://github.com/lucas-clemente/quic-go). QUIC specifies how to use >> ECN (Explicit Congestion Notification) to detect and respond to congestion >> in the network (see >> https://tools.ietf.org/html/draft-ietf-quic-transport-29#section-13.4 for >> details on that). >> >> As far as I can see, there's no way to read (and write) the ECN bits from >> the IP header, unless I use a raw socket, which would be a suboptimal >> solution for many reasons. >> The closest I could get to extracting information from the IP header was >> by using *UDPConn.ReadFromUDP* and then using *golang.org/x/net/ipv4 >> <http://golang.org/x/net/ipv4>* to parse the *oob* bytes into an >> *ipv4.ControlMessage* (or equivalently for IPv6). This at least gives me >> access to the TTL field. It seems like this approach is insufficient to get >> access to the ECN bits though. >> >> Can anyone help me with this? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/3c96ecc4-e507-48d1-a912-9e3caf6ecd11o%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/3c96ecc4-e507-48d1-a912-9e3caf6ecd11o%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > Andrei Călin > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/fe7cd943-cbb2-4530-a71a-d0b72100fb67n%40googlegroups.com.