// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package net import ( "internal/poll" "os/exec" "syscall" ) var ( // Placeholders for saving original socket system calls. origWSASocket = wsaSocketFunc origClosesocket = poll.CloseFunc origConnect = connectFunc origConnectEx = poll.ConnectExFunc origListen = listenFunc origAccept = poll.AcceptFunc ) func installTestHooks() { wsaSocketFunc = sw.WSASocket poll.CloseFunc = sw.Closesocket connectFunc = sw.Connect poll.ConnectExFunc = sw.ConnectEx listenFunc = sw.Listen poll.AcceptFunc = sw.AcceptEx } func uninstallTestHooks() { wsaSocketFunc = origWSASocket poll.CloseFunc = origClosesocket connectFunc = origConnect poll.ConnectExFunc = origConnectEx listenFunc = origListen poll.AcceptFunc = origAccept } // forceCloseSockets must be called only from TestMain. func forceCloseSockets() { for s := range sw.Sockets() { poll.CloseFunc(s) } } func addCmdInheritedHandle(cmd *exec.Cmd, fd uintptr) { // Inherited handles are not inherited by default in Windows. // We need to set the handle inheritance flag explicitly. // See https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa#parameters // for more details. if cmd.SysProcAttr == nil { cmd.SysProcAttr = &syscall.SysProcAttr{} } cmd.SysProcAttr.AdditionalInheritedHandles = append(cmd.SysProcAttr.AdditionalInheritedHandles, syscall.Handle(fd)) }