System\Net\Sockets\SafeSocketHandle.Unix.OptionTracking.cs (67)
19TrackableSocketOptions tracked = ToTrackableSocketOptions(name, level);
23if (tracked == TrackableSocketOptions.None)
39int lingerFlag = GetFlag(TrackableSocketOptions.SO_LINGER);
57int ipv6OnlyFlag = GetFlag(TrackableSocketOptions.IPV6_V6ONLY);
60values[(int)TrackableSocketOptions.IPV6_V6ONLY - 1] = DualMode ? 0 : 1;
69TrackableSocketOptions tracked = (TrackableSocketOptions)(i + 1);
86int lingerFlag = GetFlag(TrackableSocketOptions.SO_LINGER);
101TrackableSocketOptions tracked = (TrackableSocketOptions)(i + 1);
109private static int GetFlag(TrackableSocketOptions tracked) => 1 << ((int)tracked - 1);
144internal const int TrackableOptionCount = (int)TrackableSocketOptions.SO_RCVTIMEO;
146private static TrackableSocketOptions ToTrackableSocketOptions(SocketOptionName name, SocketOptionLevel level)
149(3, SocketOptionLevel.IP) => TrackableSocketOptions.IP_TOS,
150(4, SocketOptionLevel.IP) => TrackableSocketOptions.IP_TTL,
151(23, SocketOptionLevel.IPv6) => TrackableSocketOptions.IPV6_PROTECTION_LEVEL,
152(27, SocketOptionLevel.IPv6) => TrackableSocketOptions.IPV6_V6ONLY,
153(1, SocketOptionLevel.Tcp) => TrackableSocketOptions.TCP_NODELAY,
154(2, SocketOptionLevel.Tcp) => TrackableSocketOptions.TCP_EXPEDITED_1122,
155(3, SocketOptionLevel.Tcp) => TrackableSocketOptions.TCP_KEEPALIVE,
156(15, SocketOptionLevel.Tcp) => TrackableSocketOptions.TCP_FASTOPEN,
157(16, SocketOptionLevel.Tcp) => TrackableSocketOptions.TCP_KEEPCNT,
158(17, SocketOptionLevel.Tcp) => TrackableSocketOptions.TCP_KEEPINTVL,
159(1, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_DEBUG,
160(2, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_ACCEPTCONN,
161(4, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_REUSEADDR,
162(8, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_KEEPALIVE,
163(16, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_DONTROUTE,
164(64, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_USELOOPBACK,
165(128, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_LINGER,
166(256, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_OOBINLINE,
167(-129, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_DONTLINGER,
168(-5, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_EXCLUSIVEADDRUSE,
169(4097, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_SNDBUF,
170(4098, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_RCVBUF,
171(4099, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_SNDLOWAT,
172(4100, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_RCVLOWAT,
173(4101, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_SNDTIMEO,
174(4102, SocketOptionLevel.Socket) => TrackableSocketOptions.SO_RCVTIMEO,
176_ => TrackableSocketOptions.None
179private static (SocketOptionName, SocketOptionLevel) ToSocketOptions(TrackableSocketOptions options) =>
182TrackableSocketOptions.IP_TOS => ((SocketOptionName)3, SocketOptionLevel.IP),
183TrackableSocketOptions.IP_TTL => ((SocketOptionName)4, SocketOptionLevel.IP),
184TrackableSocketOptions.IPV6_PROTECTION_LEVEL => ((SocketOptionName)23, SocketOptionLevel.IPv6),
185TrackableSocketOptions.IPV6_V6ONLY => ((SocketOptionName)27, SocketOptionLevel.IPv6),
186TrackableSocketOptions.TCP_NODELAY => ((SocketOptionName)1, SocketOptionLevel.Tcp),
187TrackableSocketOptions.TCP_EXPEDITED_1122 => ((SocketOptionName)2, SocketOptionLevel.Tcp),
188TrackableSocketOptions.TCP_KEEPALIVE => ((SocketOptionName)3, SocketOptionLevel.Tcp),
189TrackableSocketOptions.TCP_FASTOPEN => ((SocketOptionName)15, SocketOptionLevel.Tcp),
190TrackableSocketOptions.TCP_KEEPCNT => ((SocketOptionName)16, SocketOptionLevel.Tcp),
191TrackableSocketOptions.TCP_KEEPINTVL => ((SocketOptionName)17, SocketOptionLevel.Tcp),
192TrackableSocketOptions.SO_DEBUG => ((SocketOptionName)1, SocketOptionLevel.Socket),
193TrackableSocketOptions.SO_ACCEPTCONN => ((SocketOptionName)2, SocketOptionLevel.Socket),
194TrackableSocketOptions.SO_REUSEADDR => ((SocketOptionName)4, SocketOptionLevel.Socket),
195TrackableSocketOptions.SO_KEEPALIVE => ((SocketOptionName)8, SocketOptionLevel.Socket),
196TrackableSocketOptions.SO_DONTROUTE => ((SocketOptionName)16, SocketOptionLevel.Socket),
197TrackableSocketOptions.SO_USELOOPBACK => ((SocketOptionName)64, SocketOptionLevel.Socket),
198TrackableSocketOptions.SO_LINGER => ((SocketOptionName)128, SocketOptionLevel.Socket),
199TrackableSocketOptions.SO_OOBINLINE => ((SocketOptionName)256, SocketOptionLevel.Socket),
200TrackableSocketOptions.SO_DONTLINGER => ((SocketOptionName)(-129), SocketOptionLevel.Socket),
201TrackableSocketOptions.SO_EXCLUSIVEADDRUSE => ((SocketOptionName)(-5), SocketOptionLevel.Socket),
202TrackableSocketOptions.SO_SNDBUF => ((SocketOptionName)4097, SocketOptionLevel.Socket),
203TrackableSocketOptions.SO_RCVBUF => ((SocketOptionName)4098, SocketOptionLevel.Socket),
204TrackableSocketOptions.SO_SNDLOWAT => ((SocketOptionName)4099, SocketOptionLevel.Socket),
205TrackableSocketOptions.SO_RCVLOWAT => ((SocketOptionName)4100, SocketOptionLevel.Socket),
206TrackableSocketOptions.SO_SNDTIMEO => ((SocketOptionName)4101, SocketOptionLevel.Socket),
207TrackableSocketOptions.SO_RCVTIMEO => ((SocketOptionName)4102, SocketOptionLevel.Socket),