...

Source file src/pkg/net/tcpsockopt_darwin.go

     1	// Copyright 2009 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package net
     6	
     7	import (
     8		"runtime"
     9		"syscall"
    10		"time"
    11	)
    12	
    13	// syscall.TCP_KEEPINTVL is missing on some darwin architectures.
    14	const sysTCP_KEEPINTVL = 0x101
    15	
    16	func setKeepAlivePeriod(fd *netFD, d time.Duration) error {
    17		// The kernel expects seconds so round to next highest second.
    18		d += (time.Second - time.Nanosecond)
    19		secs := int(d.Seconds())
    20		if err := fd.pfd.SetsockoptInt(syscall.IPPROTO_TCP, sysTCP_KEEPINTVL, secs); err != nil {
    21			return wrapSyscallError("setsockopt", err)
    22		}
    23		err := fd.pfd.SetsockoptInt(syscall.IPPROTO_TCP, syscall.TCP_KEEPALIVE, secs)
    24		runtime.KeepAlive(fd)
    25		return wrapSyscallError("setsockopt", err)
    26	}
    27	

View as plain text