github.com/ader1990/go@v0.0.0-20140630135419-8c24447fa791/src/pkg/net/tcpsockopt_windows.go (about) 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 // TCP socket options for windows 6 7 package net 8 9 import ( 10 "os" 11 "syscall" 12 "time" 13 "unsafe" 14 ) 15 16 func setKeepAlivePeriod(fd *netFD, d time.Duration) error { 17 if err := fd.incref(); err != nil { 18 return err 19 } 20 defer fd.decref() 21 22 // Windows expects milliseconds so round to next highest millisecond. 23 d += (time.Millisecond - time.Nanosecond) 24 millis := uint32(d / time.Millisecond) 25 ka := syscall.TCPKeepalive{ 26 OnOff: 1, 27 Time: millis, 28 Interval: millis, 29 } 30 ret := uint32(0) 31 size := uint32(unsafe.Sizeof(ka)) 32 err := syscall.WSAIoctl(fd.sysfd, syscall.SIO_KEEPALIVE_VALS, (*byte)(unsafe.Pointer(&ka)), size, nil, 0, &ret, nil, 0) 33 return os.NewSyscallError("WSAIoctl", err) 34 }