55 lines
1.9 KiB
Go
55 lines
1.9 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.
|
|
|
|
// +build solaris
|
|
|
|
package tcpopt
|
|
|
|
import "time"
|
|
|
|
const (
|
|
sysSOL_SOCKET = 0xffff
|
|
|
|
sysSO_SNDBUF = 0x1001
|
|
sysSO_RCVBUF = 0x1002
|
|
sysSO_KEEPALIVE = 0x8
|
|
|
|
sysTCP_NODELAY = 0x1
|
|
sysTCP_MAXSEG = 0x2
|
|
sysTCP_KEEPALIVE = 0x8
|
|
sysTCP_KEEPALIVE_THRESHOLD = 0x16
|
|
sysTCP_KEEPALIVE_ABORT_THRESHOLD = 0x17
|
|
sysTCP_KEEPIDLE = 0x22
|
|
sysTCP_KEEPCNT = 0x23
|
|
sysTCP_KEEPINTVL = 0x24
|
|
sysTCP_CORK = 0x18
|
|
sysSO_ERROR = 0x1007
|
|
)
|
|
|
|
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_KEEPIDLE, time.Second},
|
|
soKeepintvl: {ianaProtocolTCP, sysTCP_KEEPINTVL, time.Second},
|
|
soKeepcnt: {ianaProtocolTCP, sysTCP_KEEPCNT, 0},
|
|
soCork: {ianaProtocolTCP, sysTCP_CORK, 0},
|
|
soError: {sysSOL_SOCKET, sysSO_ERROR, 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_KEEPIDLE: parseKeepAliveIdleInterval,
|
|
ianaProtocolTCP<<32 | sysTCP_KEEPINTVL: parseKeepAliveProbeInterval,
|
|
ianaProtocolTCP<<32 | sysTCP_KEEPCNT: parseKeepAliveProbeCount,
|
|
ianaProtocolTCP<<32 | sysTCP_CORK: parseCork,
|
|
sysSOL_SOCKET<<32 | sysSO_ERROR: parseError,
|
|
}
|