38 lines
1.7 KiB
Go
38 lines
1.7 KiB
Go
// Copyright 2016 Mikio Hara. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package tcpopt
|
|
|
|
import "time"
|
|
|
|
var options = [soMax]option{
|
|
soNodelay: {ianaProtocolTCP, sysTCP_NODELAY, 0},
|
|
soMaxseg: {ianaProtocolTCP, sysTCP_MAXSEG, 0},
|
|
soSndbuf: {sysSOL_SOCKET, sysSO_SNDBUF, 0},
|
|
soRcvbuf: {sysSOL_SOCKET, sysSO_RCVBUF, 0},
|
|
soKeepalive: {sysSOL_SOCKET, sysSO_KEEPALIVE, 0},
|
|
soKeepidle: {ianaProtocolTCP, sysTCP_KEEPALIVE, time.Second},
|
|
soKeepintvl: {ianaProtocolTCP, sysTCP_KEEPINTVL, time.Second},
|
|
soKeepcnt: {ianaProtocolTCP, sysTCP_KEEPCNT, 0},
|
|
soCork: {ianaProtocolTCP, sysTCP_NOPUSH, 0},
|
|
soNotsentLOWAT: {ianaProtocolTCP, sysTCP_NOTSENT_LOWAT, 0},
|
|
soError: {sysSOL_SOCKET, sysSO_ERROR, 0},
|
|
soECN: {ianaProtocolTCP, sysTCP_ENABLE_ECN, 0},
|
|
}
|
|
|
|
var parsers = map[int64]func([]byte) (Option, error){
|
|
ianaProtocolTCP<<32 | sysTCP_NODELAY: parseNoDelay,
|
|
ianaProtocolTCP<<32 | sysTCP_MAXSEG: parseMSS,
|
|
sysSOL_SOCKET<<32 | sysSO_SNDBUF: parseSendBuffer,
|
|
sysSOL_SOCKET<<32 | sysSO_RCVBUF: parseReceiveBuffer,
|
|
sysSOL_SOCKET<<32 | sysSO_KEEPALIVE: parseKeepAlive,
|
|
ianaProtocolTCP<<32 | sysTCP_KEEPALIVE: parseKeepAliveIdleInterval,
|
|
ianaProtocolTCP<<32 | sysTCP_KEEPINTVL: parseKeepAliveProbeInterval,
|
|
ianaProtocolTCP<<32 | sysTCP_KEEPCNT: parseKeepAliveProbeCount,
|
|
ianaProtocolTCP<<32 | sysTCP_NOPUSH: parseCork,
|
|
ianaProtocolTCP<<32 | sysTCP_NOTSENT_LOWAT: parseNotSentLowWMK,
|
|
sysSOL_SOCKET<<32 | sysSO_ERROR: parseError,
|
|
ianaProtocolTCP<<32 | sysTCP_ENABLE_ECN: parseECN,
|
|
}
|