|  | // 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. | 
|  |  | 
|  | // +build aix darwin dragonfly freebsd linux netbsd openbsd solaris | 
|  |  | 
|  | package net | 
|  |  | 
|  | import "internal/poll" | 
|  |  | 
|  | var ( | 
|  | // Placeholders for saving original socket system calls. | 
|  | origSocket        = socketFunc | 
|  | origClose         = poll.CloseFunc | 
|  | origConnect       = connectFunc | 
|  | origListen        = listenFunc | 
|  | origAccept        = poll.AcceptFunc | 
|  | origGetsockoptInt = getsockoptIntFunc | 
|  |  | 
|  | extraTestHookInstallers   []func() | 
|  | extraTestHookUninstallers []func() | 
|  | ) | 
|  |  | 
|  | func installTestHooks() { | 
|  | socketFunc = sw.Socket | 
|  | poll.CloseFunc = sw.Close | 
|  | connectFunc = sw.Connect | 
|  | listenFunc = sw.Listen | 
|  | poll.AcceptFunc = sw.Accept | 
|  | getsockoptIntFunc = sw.GetsockoptInt | 
|  |  | 
|  | for _, fn := range extraTestHookInstallers { | 
|  | fn() | 
|  | } | 
|  | } | 
|  |  | 
|  | func uninstallTestHooks() { | 
|  | socketFunc = origSocket | 
|  | poll.CloseFunc = origClose | 
|  | connectFunc = origConnect | 
|  | listenFunc = origListen | 
|  | poll.AcceptFunc = origAccept | 
|  | getsockoptIntFunc = origGetsockoptInt | 
|  |  | 
|  | for _, fn := range extraTestHookUninstallers { | 
|  | fn() | 
|  | } | 
|  | } | 
|  |  | 
|  | // forceCloseSockets must be called only from TestMain. | 
|  | func forceCloseSockets() { | 
|  | for s := range sw.Sockets() { | 
|  | poll.CloseFunc(s) | 
|  | } | 
|  | } |