MCPcopy
hub / github.com/google/gvisor / setSockOptTCP

Method setSockOptTCP

pkg/sentry/socket/netstack/netstack.go:2232–2396  ·  view source on GitHub ↗

setSockOptTCP implements linux setsockopt(2) when the level is SOL_TCP.

(t *kernel.Task, ep commonEndpoint, name int, optVal []byte)

Source from the content-addressed store, hash-verified

2230
2231// setSockOptTCP implements linux setsockopt(2) when the level is SOL_TCP.
2232func (s *sock) setSockOptTCP(t *kernel.Task, ep commonEndpoint, name int, optVal []byte) *syserr.Error {
2233 if !socket.IsTCP(s) {
2234 return syserr.ErrUnknownProtocolOption
2235 }
2236
2237 switch name {
2238 case linux.TCP_NODELAY:
2239 if len(optVal) < sizeOfInt32 {
2240 return syserr.ErrInvalidArgument
2241 }
2242
2243 v := hostarch.ByteOrder.Uint32(optVal)
2244 ep.SocketOptions().SetDelayOption(v == 0)
2245 return nil
2246
2247 case linux.TCP_CORK:
2248 if len(optVal) < sizeOfInt32 {
2249 return syserr.ErrInvalidArgument
2250 }
2251
2252 v := hostarch.ByteOrder.Uint32(optVal)
2253 ep.SocketOptions().SetCorkOption(v != 0)
2254 return nil
2255
2256 case linux.TCP_QUICKACK:
2257 if len(optVal) < sizeOfInt32 {
2258 return syserr.ErrInvalidArgument
2259 }
2260
2261 v := hostarch.ByteOrder.Uint32(optVal)
2262 ep.SocketOptions().SetQuickAck(v != 0)
2263 return nil
2264
2265 case linux.TCP_MAXSEG:
2266 if len(optVal) < sizeOfInt32 {
2267 return syserr.ErrInvalidArgument
2268 }
2269
2270 v := hostarch.ByteOrder.Uint32(optVal)
2271 return syserr.TranslateNetstackError(ep.SetSockOptInt(tcpip.MaxSegOption, int(v)))
2272
2273 case linux.TCP_KEEPIDLE:
2274 if len(optVal) < sizeOfInt32 {
2275 return syserr.ErrInvalidArgument
2276 }
2277
2278 v := hostarch.ByteOrder.Uint32(optVal)
2279 if v < 1 || v > linux.MAX_TCP_KEEPIDLE {
2280 return syserr.ErrInvalidArgument
2281 }
2282 opt := tcpip.KeepaliveIdleOption(time.Second * time.Duration(v))
2283 return syserr.TranslateNetstackError(ep.SetSockOpt(&opt))
2284
2285 case linux.TCP_KEEPINTVL:
2286 if len(optVal) < sizeOfInt32 {
2287 return syserr.ErrInvalidArgument
2288 }
2289

Callers 1

SetSockOptMethod · 0.95

Calls 15

IsTCPFunction · 0.92
TranslateNetstackErrorFunction · 0.92
KeepaliveIdleOptionTypeAlias · 0.92
KeepaliveIntervalOptionTypeAlias · 0.92
TCPUserTimeoutOptionTypeAlias · 0.92
CongestionControlOptionTypeAlias · 0.92
TCPLingerTimeoutOptionTypeAlias · 0.92
TCPDeferAcceptOptionTypeAlias · 0.92
setSockOptTCPCustomFunction · 0.85
SetDelayOptionMethod · 0.80
SetCorkOptionMethod · 0.80

Tested by

no test coverage detected