©
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
import "net"
Overview
Index
Examples
Subdirectories
Package net为网络I/O提供了一个便携式接口,包括TCP/IP,UDP,域名解析和Unix域套接字。
虽然该软件包提供对低级网络原语的访问,但大多数客户端只需要Dial,Listen和Accept函数以及相关的Conn和Listener接口提供的基本接口。crypto/tls包使用相同的接口和类似的Dial和Listen功能。
拨号功能连接到服务器:
conn, err := net.Dial("tcp", "golang.org:80")if err != nil {// handle error}fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")status, err := bufio.NewReader(conn).ReadString('\n')// ...
Listen函数创建服务器:
ln, err := net.Listen("tcp", ":8080")if err != nil {// handle error}for { conn, err := ln.Accept()if err != nil {// handle error} go handleConnection(conn)}
解析域名的方法,不管是间接使用像Dial这样的函数,还是直接使用LookupHost和LookupAddr等函数,都会因操作系统而异。
在Unix系统上,解析器有两个解析名称的选项。它可以使用纯粹的Go解析器将DNS请求直接发送到/etc/resolv.conf中列出的服务器,或者可以使用调用C库例程(如getaddrinfo和getnameinfo)的基于cgo的解析器。
默认情况下,使用纯粹的Go解析器,因为阻止的DNS请求仅消耗goroutine,而阻塞的C调用消耗操作系统线程。当cgo可用时,将使用基于cgo的解析器代替各种条件:在不允许程序发出直接DNS请求(OS X),存在LOCALDOMAIN环境变量(即使为空)的系统上,当ASR_CONFIG环境变量非空(仅限OpenBSD)时,RES_OPTIONS或HOSTALIASES环境变量非空,当/etc/resolv.conf或/etc/nsswitch.conf指定使用Go解析器未实现的功能时,并且当查找的名字以.local结尾或者是mDNS名称时。
通过将GODEBUG环境变量(请参阅程序包运行时)的netdns值设置为go或cgo,可以覆盖解析程序决策,如下所示:
export GODEBUG=netdns=go # force pure Go resolverexport GODEBUG=netdns=cgo # force cgo resolver
通过设置netgo或netcgo构建标记来构建Go源树时,也可以强制做出决定。
数字netdns设置(如GODEBUG = netdns = 1)会导致解析器打印有关其决策的调试信息。要强制特定的解析器同时打印调试信息,请使用加号连接两个设置,如GODEBUG = netdns = go + 1。
在计划9中,解析器总是访问/net /cs和/net/dns。
在Windows上,解析器总是使用C库函数,例如GetAddrInfo和DnsQuery。
Constants
Variables
func InterfaceAddrs() ([]Addr, error)
func Interfaces() ([]Interface, error)
func JoinHostPort(host, port string) string
func LookupAddr(addr string) (names []string, err error)
func LookupCNAME(host string) (cname string, err error)
func LookupHost(host string) (addrs []string, err error)
func LookupIP(host string) ([]IP, error)
func LookupMX(name string) ([]*MX, error)
func LookupNS(name string) ([]*NS, error)
func LookupPort(network, service string) (port int, err error)
func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error)
func LookupTXT(name string) ([]string, error)
func SplitHostPort(hostport string) (host, port string, err error)
type Addr
type AddrError
func (e *AddrError) Error() string
func (e *AddrError) Temporary() bool
func (e *AddrError) Timeout() bool
type Buffers
func (v *Buffers) Read(p []byte) (n int, err error)
func (v *Buffers) WriteTo(w io.Writer) (n int64, err error)
type Conn
func Dial(network, address string) (Conn, error)
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
func FileConn(f *os.File) (c Conn, err error)
func Pipe() (Conn, Conn)
type DNSConfigError
func (e *DNSConfigError) Error() string
func (e *DNSConfigError) Temporary() bool
func (e *DNSConfigError) Timeout() bool
type DNSError
func (e *DNSError) Error() string
func (e *DNSError) Temporary() bool
func (e *DNSError) Timeout() bool
type Dialer
func (d *Dialer) Dial(network, address string) (Conn, error)
func (d *Dialer) DialContext(ctx context.Context, network, address string) (Conn, error)
type Error
type Flags
func (f Flags) String() string
type HardwareAddr
func ParseMAC(s string) (hw HardwareAddr, err error)
func (a HardwareAddr) String() string
type IP
func IPv4(a, b, c, d byte) IP
func ParseCIDR(s string) (IP, *IPNet, error)
func ParseIP(s string) IP
func (ip IP) DefaultMask() IPMask
func (ip IP) Equal(x IP) bool
func (ip IP) IsGlobalUnicast() bool
func (ip IP) IsInterfaceLocalMulticast() bool
func (ip IP) IsLinkLocalMulticast() bool
func (ip IP) IsLinkLocalUnicast() bool
func (ip IP) IsLoopback() bool
func (ip IP) IsMulticast() bool
func (ip IP) IsUnspecified() bool
func (ip IP) MarshalText() ([]byte, error)
func (ip IP) Mask(mask IPMask) IP
func (ip IP) String() string
func (ip IP) To16() IP
func (ip IP) To4() IP
func (ip *IP) UnmarshalText(text []byte) error
type IPAddr
func ResolveIPAddr(network, address string) (*IPAddr, error)
func (a *IPAddr) Network() string
func (a *IPAddr) String() string
type IPConn
func DialIP(network string, laddr, raddr *IPAddr) (*IPConn, error)
func ListenIP(network string, laddr *IPAddr) (*IPConn, error)
func (c *IPConn) Close() error
func (c *IPConn) File() (f *os.File, err error)
func (c *IPConn) LocalAddr() Addr
func (c *IPConn) Read(b []byte) (int, error)
func (c *IPConn) ReadFrom(b []byte) (int, Addr, error)
func (c *IPConn) ReadFromIP(b []byte) (int, *IPAddr, error)
func (c *IPConn) ReadMsgIP(b, oob []byte) (n, oobn, flags int, addr *IPAddr, err error)
func (c *IPConn) RemoteAddr() Addr
func (c *IPConn) SetDeadline(t time.Time) error
func (c *IPConn) SetReadBuffer(bytes int) error
func (c *IPConn) SetReadDeadline(t time.Time) error
func (c *IPConn) SetWriteBuffer(bytes int) error
func (c *IPConn) SetWriteDeadline(t time.Time) error
func (c *IPConn) SyscallConn() (syscall.RawConn, error)
func (c *IPConn) Write(b []byte) (int, error)
func (c *IPConn) WriteMsgIP(b, oob []byte, addr *IPAddr) (n, oobn int, err error)
func (c *IPConn) WriteTo(b []byte, addr Addr) (int, error)
func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error)
type IPMask
func CIDRMask(ones, bits int) IPMask
func IPv4Mask(a, b, c, d byte) IPMask
func (m IPMask) Size() (ones, bits int)
func (m IPMask) String() string
type IPNet
func (n *IPNet) Contains(ip IP) bool
func (n *IPNet) Network() string
func (n *IPNet) String() string
type Interface
func InterfaceByIndex(index int) (*Interface, error)
func InterfaceByName(name string) (*Interface, error)
func (ifi *Interface) Addrs() ([]Addr, error)
func (ifi *Interface) MulticastAddrs() ([]Addr, error)
type InvalidAddrError
func (e InvalidAddrError) Error() string
func (e InvalidAddrError) Temporary() bool
func (e InvalidAddrError) Timeout() bool
type Listener
func FileListener(f *os.File) (ln Listener, err error)
func Listen(network, address string) (Listener, error)
type MX
type NS
type OpError
func (e *OpError) Error() string
func (e *OpError) Temporary() bool
func (e *OpError) Timeout() bool
type PacketConn
func FilePacketConn(f *os.File) (c PacketConn, err error)
func ListenPacket(network, address string) (PacketConn, error)
type ParseError
func (e *ParseError) Error() string
type Resolver
func (r *Resolver) LookupAddr(ctx context.Context, addr string) (names []string, err error)
func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, err error)
func (r *Resolver) LookupHost(ctx context.Context, host string) (addrs []string, err error)
func (r *Resolver) LookupIPAddr(ctx context.Context, host string) ([]IPAddr, error)
func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error)
func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error)
func (r *Resolver) LookupPort(ctx context.Context, network, service string) (port int, err error)
func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*SRV, err error)
func (r *Resolver) LookupTXT(ctx context.Context, name string) ([]string, error)
type SRV
type TCPAddr
func ResolveTCPAddr(network, address string) (*TCPAddr, error)
func (a *TCPAddr) Network() string
func (a *TCPAddr) String() string
type TCPConn
func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error)
func (c *TCPConn) Close() error
func (c *TCPConn) CloseRead() error
func (c *TCPConn) CloseWrite() error
func (c *TCPConn) File() (f *os.File, err error)
func (c *TCPConn) LocalAddr() Addr
func (c *TCPConn) Read(b []byte) (int, error)
func (c *TCPConn) ReadFrom(r io.Reader) (int64, error)
func (c *TCPConn) RemoteAddr() Addr
func (c *TCPConn) SetDeadline(t time.Time) error
func (c *TCPConn) SetKeepAlive(keepalive bool) error
func (c *TCPConn) SetKeepAlivePeriod(d time.Duration) error
func (c *TCPConn) SetLinger(sec int) error
func (c *TCPConn) SetNoDelay(noDelay bool) error
func (c *TCPConn) SetReadBuffer(bytes int) error
func (c *TCPConn) SetReadDeadline(t time.Time) error
func (c *TCPConn) SetWriteBuffer(bytes int) error
func (c *TCPConn) SetWriteDeadline(t time.Time) error
func (c *TCPConn) SyscallConn() (syscall.RawConn, error)
func (c *TCPConn) Write(b []byte) (int, error)
type TCPListener
func ListenTCP(network string, laddr *TCPAddr) (*TCPListener, error)
func (l *TCPListener) Accept() (Conn, error)
func (l *TCPListener) AcceptTCP() (*TCPConn, error)
func (l *TCPListener) Addr() Addr
func (l *TCPListener) Close() error
func (l *TCPListener) File() (f *os.File, err error)
func (l *TCPListener) SetDeadline(t time.Time) error
type UDPAddr
func ResolveUDPAddr(network, address string) (*UDPAddr, error)
func (a *UDPAddr) Network() string
func (a *UDPAddr) String() string
type UDPConn
func DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error)
func ListenMulticastUDP(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)
func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error)
func (c *UDPConn) Close() error
func (c *UDPConn) File() (f *os.File, err error)
func (c *UDPConn) LocalAddr() Addr
func (c *UDPConn) Read(b []byte) (int, error)
func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error)
func (c *UDPConn) ReadFromUDP(b []byte) (int, *UDPAddr, error)
func (c *UDPConn) ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *UDPAddr, err error)
func (c *UDPConn) RemoteAddr() Addr
func (c *UDPConn) SetDeadline(t time.Time) error
func (c *UDPConn) SetReadBuffer(bytes int) error
func (c *UDPConn) SetReadDeadline(t time.Time) error
func (c *UDPConn) SetWriteBuffer(bytes int) error
func (c *UDPConn) SetWriteDeadline(t time.Time) error
func (c *UDPConn) SyscallConn() (syscall.RawConn, error)
func (c *UDPConn) Write(b []byte) (int, error)
func (c *UDPConn) WriteMsgUDP(b, oob []byte, addr *UDPAddr) (n, oobn int, err error)
func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error)
func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error)
type UnixAddr
func ResolveUnixAddr(network, address string) (*UnixAddr, error)
func (a *UnixAddr) Network() string
func (a *UnixAddr) String() string
type UnixConn
func DialUnix(network string, laddr, raddr *UnixAddr) (*UnixConn, error)
func ListenUnixgram(network string, laddr *UnixAddr) (*UnixConn, error)
func (c *UnixConn) Close() error
func (c *UnixConn) CloseRead() error
func (c *UnixConn) CloseWrite() error
func (c *UnixConn) File() (f *os.File, err error)
func (c *UnixConn) LocalAddr() Addr
func (c *UnixConn) Read(b []byte) (int, error)
func (c *UnixConn) ReadFrom(b []byte) (int, Addr, error)
func (c *UnixConn) ReadFromUnix(b []byte) (int, *UnixAddr, error)
func (c *UnixConn) ReadMsgUnix(b, oob []byte) (n, oobn, flags int, addr *UnixAddr, err error)
func (c *UnixConn) RemoteAddr() Addr
func (c *UnixConn) SetDeadline(t time.Time) error
func (c *UnixConn) SetReadBuffer(bytes int) error
func (c *UnixConn) SetReadDeadline(t time.Time) error
func (c *UnixConn) SetWriteBuffer(bytes int) error
func (c *UnixConn) SetWriteDeadline(t time.Time) error
func (c *UnixConn) SyscallConn() (syscall.RawConn, error)
func (c *UnixConn) Write(b []byte) (int, error)
func (c *UnixConn) WriteMsgUnix(b, oob []byte, addr *UnixAddr) (n, oobn int, err error)
func (c *UnixConn) WriteTo(b []byte, addr Addr) (int, error)
func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (int, error)
type UnixListener
func ListenUnix(network string, laddr *UnixAddr) (*UnixListener, error)
func (l *UnixListener) Accept() (Conn, error)
func (l *UnixListener) AcceptUnix() (*UnixConn, error)
func (l *UnixListener) Addr() Addr
func (l *UnixListener) Close() error
func (l *UnixListener) File() (f *os.File, err error)
func (l *UnixListener) SetDeadline(t time.Time) error
func (l *UnixListener) SetUnlinkOnClose(unlink bool)
type UnknownNetworkError
func (e UnknownNetworkError) Error() string
func (e UnknownNetworkError) Temporary() bool
func (e UnknownNetworkError) Timeout() bool
Bugs
CIDRMask IP.DefaultMask IP.Mask IPv4 IPv4Mask Listener ParseCIDR ParseIP
addrselect.go cgo_stub.go conf.go dial.go dnsclient.go dnsclient_unix.go dnsconfig_unix.go dnsmsg.go error_posix.go fd_unix.go file.go file_unix.go hook.go hook_unix.go hosts.go interface.go interface_linux.go ip.go iprawsock.go iprawsock_posix.go ipsock.go ipsock_posix.go lookup.go lookup_unix.go mac.go net.go nss.go parse.go pipe.go port.go port_unix.go rawconn.go sendfile_linux.go sock_cloexec.go sock_linux.go sock_posix.go sockopt_linux.go sockopt_posix.go sockoptip_linux.go sockoptip_posix.go tcpsock.go tcpsock_posix.go tcpsockopt_posix.go tcpsockopt_unix.go udpsock.go udpsock_posix.go unixsock.go unixsock_posix.go writev_unix.go
IP地址长度(字节)。
const ( IPv4len = 4 IPv6len = 16)
众所周知的IPv4地址
var ( IPv4bcast = IPv4(255, 255, 255, 255) // limited broadcast IPv4allsys = IPv4(224, 0, 0, 1) // all systems IPv4allrouter = IPv4(224, 0, 0, 2) // all routers IPv4zero = IPv4(0, 0, 0, 0) // all zeros)
众所周知的IPv6地址
var ( IPv6zero = IP{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} IPv6unspecified = IP{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} IPv6loopback = IP{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} IPv6interfacelocalallnodes = IP{0xff, 0x01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01} IPv6linklocalallnodes = IP{0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x01} IPv6linklocalallrouters = IP{0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x02})
DefaultResolver是包级查找功能使用的解析器,Dialer没有指定的解析器。
var DefaultResolver = &Resolver{}
OpError中包含各种错误。
var ( ErrWriteToConnected = errors.New("use of WriteTo with pre-connected connection"))
func InterfaceAddrs() ([]Addr, error)
InterfaceAddrs返回系统的单播接口地址列表。
返回的列表不标识关联的接口; 使用Interfaces和Interface.Addrs获取更多细节。
func Interfaces() ([]Interface, error)
Interfaces返回系统网络接口的列表。
func JoinHostPort(host, port string) string
JoinHostPort将主机和端口组合成“host:port”形式的网络地址。如果主机包含冒号(如文字IPv6地址中所示),则JoinHostPort返回“host:port”。
请参阅func拨号以获取主机和端口参数的说明。
func LookupAddr(addr string) (names []string, err error)
LookupAddr对给定地址执行反向查找,返回映射到该地址的名称列表。
当使用主机C库解析器时,最多返回一个结果。要绕过主机解析器,请使用自定义解析器。
func LookupCNAME(host string) (cname string, err error)
LookupCNAME返回给定主机的规范名称。不关心规范名称的调用者可以直接调用LookupHost或LookupIP; 都将照顾解决规范名称作为查找的一部分。
规范名称是跟随零个或多个CNAME记录后的最终名称。只要主机解析为地址记录,则主机不包含DNS“CNAME”记录时,LookupCNAME不会返回错误。
func LookupHost(host string) (addrs []string, err error)
LookupHost使用本地解析器查找给定的主机。它返回该主机地址的一部分。
func LookupIP(host string) ([]IP, error)
LookupIP使用本地解析器查找主机。它返回该主机的IPv4和IPv6地址的一部分。
func LookupMX(name string) ([]*MX, error)
LookupMX返回给定域名的DNS MX记录,并按喜好排序。
func LookupNS(name string) ([]*NS, error)
LookupNS返回给定域名的DNS NS记录。
func LookupPort(network, service string) (port int, err error)
LookupPort查找给定网络和服务的端口。
func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error)
LookupSRV尝试解析给定服务,协议和域名的SRV查询。原型是“tcp”或“udp”。返回的记录按优先级排序,并按优先级权重随机排序。
LookupSRV根据RFC 2782构建DNS名称以查找。也就是说,它查找_service._proto.name。为了适应以非标准名称发布SRV记录的服务,如果service和proto都是空字符串,LookupSRV将直接查找名称。
func LookupTXT(name string) ([]string, error)
LookupTXT返回给定域名的DNS TXT记录。
func SplitHostPort(hostport string) (host, port string, err error)
SplitHostPort将形式为“host:port”,“host%zone:port”,“host:port”或“host%zone:port”的网络地址拆分为主机或主机%zone和端口。
hostport中的文字IPv6地址必须用方括号括起来,如“:: 1:80”,“:: 1%lo0:80”中所示。
有关hostport参数以及主机和端口结果的说明,请参见func Dial。
Addr表示网络终点地址。
Network和String这两种方法通常返回可以作为参数传递给Dial的字符串,但字符串的确切形式和含义取决于实现。
type Addr interface { Network() string // name of the network (for example, "tcp", "udp") String() string // string form of address (for example, "192.0.2.1:25", "[2001:db8::1]:80")}
type AddrError struct { Err string Addr string}
func (e *AddrError) Error() string
func (e *AddrError) Temporary() bool
func (e *AddrError) Timeout() bool
Buffers 包含零个或多个要写入的字节。
在某些机器上,对于某些类型的连接,这会针对特定于操作系统的批处理写入操作(如“writev”)进行优化。
type Buffers [][]byte
func (v *Buffers) Read(p []byte) (n int, err error)
func (v *Buffers) WriteTo(w io.Writer) (n int64, err error)
Conn是一个通用的面向流的网络连接。
多个goroutines可以同时调用Conn上的方法。
type Conn interface { // Read reads data from the connection. // Read can be made to time out and return an Error with Timeout() == true // after a fixed time limit; see SetDeadline and SetReadDeadline. Read(b []byte) (n int, err error) // Write writes data to the connection. // Write can be made to time out and return an Error with Timeout() == true // after a fixed time limit; see SetDeadline and SetWriteDeadline. Write(b []byte) (n int, err error) // Close closes the connection. // Any blocked Read or Write operations will be unblocked and return errors. Close() error // LocalAddr returns the local network address. LocalAddr() Addr // RemoteAddr returns the remote network address. RemoteAddr() Addr // SetDeadline sets the read and write deadlines associated // with the connection. It is equivalent to calling both // SetReadDeadline and SetWriteDeadline. // // A deadline is an absolute time after which I/O operations // fail with a timeout (see type Error) instead of // blocking. The deadline applies to all future and pending // I/O, not just the immediately following call to Read or // Write. After a deadline has been exceeded, the connection // can be refreshed by setting a deadline in the future. // // An idle timeout can be implemented by repeatedly extending // the deadline after successful Read or Write calls. // // A zero value for t means I/O operations will not time out. SetDeadline(t time.Time) error // SetReadDeadline sets the deadline for future Read calls // and any currently-blocked Read call. // A zero value for t means Read will not time out. SetReadDeadline(t time.Time) error // SetWriteDeadline sets the deadline for future Write calls // and any currently-blocked Write call. // Even if write times out, it may return n > 0, indicating that // some of the data was successfully written. // A zero value for t means Write will not time out. SetWriteDeadline(t time.Time) error}
func Dial(network, address string) (Conn, error)
Dial 连接到指定网络上的地址。
已知网络是“tcp”,“tcp4”(仅IPv4),“tcp6”(仅IPv6),“udp”,“udp4”(仅IPv4),“udp6”(仅IPv6),“ip” ,“ip4”(仅限IPv4),“ip6”(仅限IPv6),“unix”,“unixgram”和“unixpacket”。
对于TCP和UDP网络,地址格式为“主机:端口”。主机必须是文字IP地址或可以解析为IP地址的主机名。该端口必须是文字端口号或服务名称。如果主机是文字IPv6地址,则必须将其放在方括号中,如“2001:db8 :: 1:80”或“fe80 :: 1%zone:80”中所示。该区域指定RFC 4007中定义的文字IPv6地址的范围。函数JoinHostPort和SplitHostPort以这种形式操作一对主机和端口。当使用TCP,并且主机解析为多个IP地址时,Dial将按顺序尝试每个IP地址,直到成功为止。
例子:
Dial("tcp", "golang.org:http")Dial("tcp", "192.0.2.1:http")Dial("tcp", "198.51.100.1:80")Dial("udp", "[2001:db8::1]:domain")Dial("udp", "[fe80::1%lo0]:53")Dial("tcp", ":80")
对于IP网络,网络必须是“ip”,“ip4”或“ip6”,后跟冒号和文字协议号或协议名称,地址格式为“主机”。主机必须是文字IP地址或带区域的文字IPv6地址。它取决于每个操作系统操作系统的行为如何使用不知名的协议编号,例如“0”或“255”。
例子:
Dial("ip4:1", "192.0.2.1")Dial("ip6:ipv6-icmp", "2001:db8::1")Dial("ip6:58", "fe80::1%lo0")
对于TCP,UDP和IP网络,如果主机为空或文字未指定的IP地址,如TCP和UDP的“:80”,“0.0.0.0:80”或“::: 80”,“”, IP为0.0.0.0“或”::“,则假定为本地系统。
对于Unix网络,地址必须是文件系统路径。
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
DialTimeout就像拨号一样,但需要超时。
如果需要,超时包括名称解析。当使用TCP时,并且地址参数中的主机解析为多个IP地址时,超时将分布在每个连续拨号上,以便每个拨号都有适当的连接时间。
请参阅func拨号以获取网络和地址参数的说明。
func FileConn(f *os.File) (c Conn, err error)
FileConn返回与打开的文件f相对应的网络连接的副本。完成后关闭f是主叫方的责任。关闭c不会影响f,关闭f不会影响c。
func Pipe() (Conn, Conn)
Pipe创建一个同步的内存中全双工网络连接; 两端都实现了Conn接口。一端的读取与另一端的写入相匹配,在两者之间直接复制数据; 没有内部缓冲。
DNSConfigError表示读取机器的DNS配置时发生错误。(不再使用;保持兼容性。)
type DNSConfigError struct { Err error}
func (e *DNSConfigError) Error() string
func (e *DNSConfigError) Temporary() bool
func (e *DNSConfigError) Timeout() bool
DNSError代表DNS查找错误。
type DNSError struct { Err string // description of the error Name string // name looked for Server string // server used IsTimeout bool // if true, timed out; not all timeouts set this IsTemporary bool // if true, error is temporary; not all errors set this}
func (e *DNSError) Error() string
func (e *DNSError) Temporary() bool
Temporary报告是否知道DNS错误是暂时的。这并不总是已知的; 由于临时错误,DNS查找可能会失败并返回Temporary返回false的DNSError。
func (e *DNSError) Timeout() bool
Timeout报告DNS查询是否已知超时。这并不总是已知的; DNS查找可能由于超时而失败,并返回Timeout返回false的DNSError。
Diale包含用于连接到地址的选项。
每个字段的零值相当于没有该选项的拨号。因此使用拨号器的零值进行拨号相当于只拨打拨号功能。
type Dialer struct { // Timeout is the maximum amount of time a dial will wait for // a connect to complete. If Deadline is also set, it may fail // earlier. // // The default is no timeout. // // When using TCP and dialing a host name with multiple IP // addresses, the timeout may be divided between them. // // With or without a timeout, the operating system may impose // its own earlier timeout. For instance, TCP timeouts are // often around 3 minutes. Timeout time.Duration // Deadline is the absolute point in time after which dials // will fail. If Timeout is set, it may fail earlier. // Zero means no deadline, or dependent on the operating system // as with the Timeout option. Deadline time.Time // LocalAddr is the local address to use when dialing an // address. The address must be of a compatible type for the // network being dialed. // If nil, a local address is automatically chosen. LocalAddr Addr // DualStack enables RFC 6555-compliant "Happy Eyeballs" // dialing when the network is "tcp" and the host in the // address parameter resolves to both IPv4 and IPv6 addresses. // This allows a client to tolerate networks where one address // family is silently broken. DualStack bool // FallbackDelay specifies the length of time to wait before // spawning a fallback connection, when DualStack is enabled. // If zero, a default delay of 300ms is used. FallbackDelay time.Duration // KeepAlive specifies the keep-alive period for an active // network connection. // If zero, keep-alives are not enabled. Network protocols // that do not support keep-alives ignore this field. KeepAlive time.Duration // Resolver optionally specifies an alternate resolver to use. Resolver *Resolver // Cancel is an optional channel whose closure indicates that // the dial should be canceled. Not all types of dials support // cancelation. // // Deprecated: Use DialContext instead. Cancel <-chan struct{}}
func (d *Dialer) Dial(network, address string) (Conn, error)
Dial 连接到指定网络上的地址。
请参阅func Dial以获取网络和地址参数的说明。
func (d *Dialer) DialContext(ctx context.Context, network, address string) (Conn, error)
DialContext使用提供的上下文连接到指定网络上的地址。
提供的上下文必须是非零。如果上下文在连接完成之前到期,则返回错误。一旦成功连接,上下文的任何到期都不会影响连接。
当使用TCP时,并且地址参数中的主机解析为多个网络地址时,任何拨号超时(来自d.Timeout或ctx)都会分布在每个连续的拨号盘上,这样每个拨号连接都有相应的一小部分时间。例如,如果主机有4个IP地址,并且超时时间为1分钟,则在尝试下一个地址之前,连接到每个单个地址的时间将为15秒。
请参阅func Dial以获取网络和地址参数的说明。
Error代表网络错误。
type Error interface { error Timeout() bool // Is the error a timeout? Temporary() bool // Is the error temporary?}
type Flags uint
const ( FlagUp Flags = 1 << iota // interface is up FlagBroadcast // interface supports broadcast access capability FlagLoopback // interface is a loopback interface FlagPointToPoint // interface belongs to a point-to-point link FlagMulticast // interface supports multicast access capability)
func (f Flags) String() string
HardwareAddr表示物理硬件地址。
type HardwareAddr []byte
func ParseMAC(s string) (hw HardwareAddr, err error)
ParseMAC使用以下格式之一将IEEE 802 MAC-48,EUI-48,EUI-64或20-octet IP over InfiniBand链路层地址解析为:
01:23:45:67:89:ab01:23:45:67:89:ab:cd:ef01:23:45:67:89:ab:cd:ef:00:00:01:23:45:67:89:ab:cd:ef:00:0001-23-45-67-89-ab01-23-45-67-89-ab-cd-ef01-23-45-67-89-ab-cd-ef-00-00-01-23-45-67-89-ab-cd-ef-00-000123.4567.89ab0123.4567.89ab.cdef0123.4567.89ab.cdef.0000.0123.4567.89ab.cdef.0000
func (a HardwareAddr) String() string
IP是单个IP地址,即一个字节片段。该软件包中的函数接受4字节(IPv4)或16字节(IPv6)切片作为输入。
请注意,在本文档中,将IP地址称为IPv4地址或IPv6地址是地址的语义属性,而不仅仅是字节片的长度:16字节的片仍然可以是IPv4地址。
type IP []byte
func IPv4(a, b, c, d byte) IP
IPv4返回IPv4地址abcd的IP地址(16字节形式)
package mainimport ("fmt""net")func main() { fmt.Println(net.IPv4(8, 8, 8, 8))}
func ParseCIDR(s string) (IP, *IPNet, error)
ParseCIDR将s解析为CIDR表示法IP地址和前缀长度,如RFC 4632和RFC 4291中定义的“192.0.2.0/24”或“2001:db8 :: / 32”。
它返回由IP和前缀长度暗示的IP地址和网络。例如,ParseCIDR(“192.0.2.1/24”)返回IP地址192.0.2.1和网络192.0.2.0/24。
package mainimport ("fmt""log""net")func main() { ipv4Addr, ipv4Net, err := net.ParseCIDR("192.0.2.1/24")if err != nil { log.Fatal(err)} fmt.Println(ipv4Addr) fmt.Println(ipv4Net) ipv6Addr, ipv6Net, err := net.ParseCIDR("2001:db8:a0b:12f0::1/32")if err != nil { log.Fatal(err)} fmt.Println(ipv6Addr) fmt.Println(ipv6Net)}
func ParseIP(s string) IP
ParseIP将s解析为IP地址,并返回结果。字符串s可以采用点分十进制(“192.0.2.1”)或IPv6(“2001:db8 :: 68”)形式。如果s不是IP地址的有效文本表示,则ParseIP返回nil。
package mainimport ("fmt""net")func main() { fmt.Println(net.ParseIP("192.0.2.1")) fmt.Println(net.ParseIP("2001:db8::68")) fmt.Println(net.ParseIP("192.0.2"))}
func (ip IP) DefaultMask() IPMask
DefaultMask返回IP地址ip的默认IP掩码。只有IPv4地址具有默认掩码; 如果ip不是有效的IPv4地址,则DefaultMask返回nil。
package mainimport ("fmt""net")func main() { ip := net.ParseIP("192.0.2.1") fmt.Println(ip.DefaultMask())}
func (ip IP) Equal(x IP) bool
Equal 报告ip和x是否是相同的IP地址。IPv4地址和IPv6形式的相同地址被认为是相同的。
func (ip IP) IsGlobalUnicast() bool
IsGlobalUnicast报告ip是否是全球单播地址。
全局单播地址的标识使用RFC 1122,RFC 4632和RFC 4291中定义的地址类型标识,但IPv4定向广播地址除外。即使ip位于IPv4专用地址空间或本地IPv6单播地址空间,它也会返回true。
func (ip IP) IsInterfaceLocalMulticast() bool
IsInterfaceLocalMulticast报告ip是否是接口本地多播地址。
func (ip IP) IsLinkLocalMulticast() bool
IsLinkLocalMulticast报告ip是否是链路本地多播地址。
func (ip IP) IsLinkLocalUnicast() bool
IsLinkLocalUnicast报告ip是否是链路本地单播地址。
func (ip IP) IsLoopback() bool
IsLoopback报告ip是否是环回地址。
func (ip IP) IsMulticast() bool
IsMulticast报告ip是否是多播地址。
func (ip IP) IsUnspecified() bool
IsUnspecified报告ip是否是未指定的地址,IPv4地址“0.0.0.0”或IPv6地址“::”。
func (ip IP) MarshalText() ([]byte, error)
MarshalText实现了encoding.TextMarshaler接口。编码与String返回的一样,但有一个例外:当len(ip)为零时,它返回一个空片。
func (ip IP) Mask(mask IPMask) IP
Mask返回用掩码掩码IP地址ip的结果。
package mainimport ("fmt""net")func main() { ipv4Addr := net.ParseIP("192.0.2.1")// This mask corresponds to a /24 subnet for IPv4. ipv4Mask := net.CIDRMask(24, 32) fmt.Println(ipv4Addr.Mask(ipv4Mask)) ipv6Addr := net.ParseIP("2001:db8:a0b:12f0::1")// This mask corresponds to a /32 subnet for IPv6. ipv6Mask := net.CIDRMask(32, 128) fmt.Println(ipv6Addr.Mask(ipv6Mask))}
func (ip IP) String() string
String返回IP地址ip的字符串形式。它返回4种形式之一:
- "<nil>", if ip has length 0- dotted decimal ("192.0.2.1"), if ip is an IPv4 or IP4-mapped IPv6 address- IPv6 ("2001:db8::1"), if ip is a valid IPv6 address- the hexadecimal form of ip, without punctuation, if no other cases apply
func (ip IP) To16() IP
To16将IP地址ip转换为16字节的表示形式。如果ip不是IP地址(它是错误的长度),To16返回nil。
func (ip IP) To4() IP
To4将IPv4地址ip转换为4字节表示形式。如果ip不是IPv4地址,则To4返回nil。
func (ip *IP) UnmarshalText(text []byte) error
UnmarshalText实现了encoding.TextUnmarshaler接口。IP地址预计采用ParseIP接受的形式。
IPAddr表示IP终点的地址。
type IPAddr struct { IP IP Zone string // IPv6 scoped addressing zone}
func ResolveIPAddr(network, address string) (*IPAddr, error)
ResolveIPAddr返回IP结束点的地址。
网络必须是IP网络名称。
如果地址参数中的主机不是文字IP地址,则ResolveIPAddr将地址解析为IP终点的地址。否则,它会将该地址解析为文字IP地址。地址参数可以使用主机名称,但不建议这样做,因为它最多只会返回一个主机名称的IP地址。
请参阅func拨号以获取网络和地址参数的说明。
func (a *IPAddr) Network() string
Network返回地址的网络名称,“ip”。
func (a *IPAddr) String() string
IPConn是用于IP网络连接的Conn和PacketConn接口的实现。
type IPConn struct { // contains filtered or unexported fields}
func DialIP(network string, laddr, raddr *IPAddr) (*IPConn, error)
DialIP就像IP网络拨号一样。
网络必须是IP网络名称; 详情请参阅功能表。
如果laddr为零,则自动选择本地地址。如果raddr的IP字段为零或未指定的IP地址,则假定本地系统。
func ListenIP(network string, laddr *IPAddr) (*IPConn, error)
ListenIP就像IP网络的ListenPacket一样。
网络必须是IP网络名称; 详情请参阅功能表。
如果laddr的IP字段为零或未指定IP地址,则ListenIP侦听本地系统的所有可用IP地址(组播IP地址除外)。
func (c *IPConn) Close() error
Close关闭连接。
func (c *IPConn) File() (f *os.File, err error)
File将底层os.File设置为阻止模式并返回副本。完成后关闭f是主叫方的责任。关闭c不会影响f,关闭f不会影响c。
返回的os.File的文件描述符与连接不同。尝试使用此副本更改原件的属性可能会或可能不会产生所需的效果。
func (c *IPConn) LocalAddr() Addr
LocalAddr返回本地网络地址。返回的地址由LocalAddr的所有调用共享,所以不要修改它。
func (c *IPConn) Read(b []byte) (int, error)
Read实现Conn Read方法。
func (c *IPConn) ReadFrom(b []byte) (int, Addr, error)
ReadFrom实现PacketConn ReadFrom方法。
func (c *IPConn) ReadFromIP(b []byte) (int, *IPAddr, error)
ReadFromIP的作用类似于ReadFrom,但返回一个IPAddr。
func (c *IPConn) ReadMsgIP(b, oob []byte) (n, oobn, flags int, addr *IPAddr, err error)
ReadMsgIP从c读取消息,将有效载荷复制到b中,并将关联的带外数据复制到oob中。它返回复制到b中的字节数,复制到oob中的字节数,在消息上设置的标志以及消息的源地址。
软件包golang.org/x/net/ipv4和golang.org/x/net/ipv6可用于操作oob中的IP级套接字选项。
func (c *IPConn) RemoteAddr() Addr
RemoteAddr返回远程网络地址。返回的地址由RemoteAddr的所有调用共享,所以不要修改它。
func (c *IPConn) SetDeadline(t time.Time) error
SetDeadline实现Conn SetDeadline方法。
func (c *IPConn) SetReadBuffer(bytes int) error
SetReadBuffer设置与连接关联的操作系统接收缓冲区的大小。
func (c *IPConn) SetReadDeadline(t time.Time) error
SetReadDeadline实现Conn SetReadDeadline方法。
func (c *IPConn) SetWriteBuffer(bytes int) error
SetWriteBuffer设置与连接关联的操作系统传输缓冲区的大小。
func (c *IPConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline实现Conn SetWriteDeadline方法。
func (c *IPConn) SyscallConn() (syscall.RawConn, error)
SyscallConn返回一个原始网络连接。这实现了syscall.Conn接口。
func (c *IPConn) Write(b []byte) (int, error)
Write实现了Conn Write方法。
func (c *IPConn) WriteMsgIP(b, oob []byte, addr *IPAddr) (n, oobn int, err error)
WriteMsgIP通过c向addr写入消息,从b复制有效载荷和oob的相关带外数据。它返回写入的有效负载和带外字节数。
软件包golang.org/x/net/ipv4和golang.org/x/net/ipv6可用于操作oob中的IP级套接字选项。
func (c *IPConn) WriteTo(b []byte, addr Addr) (int, error)
WriteTo实现PacketConn WriteTo方法。
func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error)
WriteToIP的行为与WriteTo类似,但采用IPAddr。
IP mask是一个IP地址。
type IPMask []byte
func CIDRMask(ones, bits int) IPMask
CIDRMask返回由ones' 1 bits followed by 0s up to a total length of
比特位组成的IPMask 。对于这种形式的掩码,CIDRMask是IPMask.Size的反转。
package mainimport ("fmt""net")func main() {// This mask corresponds to a /31 subnet for IPv4. fmt.Println(net.CIDRMask(31, 32))// This mask corresponds to a /64 subnet for IPv6. fmt.Println(net.CIDRMask(64, 128))}
func IPv4Mask(a, b, c, d byte) IPMask
IPv4掩码返回IPv4掩码abcd的IP掩码(4字节形式)
package mainimport ("fmt""net")func main() { fmt.Println(net.IPv4Mask(255, 255, 255, 0))}
func (m IPMask) Size() (ones, bits int)
Size返回掩码中的前导数和总位数。如果掩码不是规范形式 - 其后是零,则Size返回0,0。
func (m IPMask) String() string
String返回m的十六进制形式,没有标点符号。
IPNet代表一个IP网络。
type IPNet struct { IP IP // network number Mask IPMask // network mask}
func (n *IPNet) Contains(ip IP) bool
包含报告网络是否包含IP。
func (n *IPNet) Network() string
Network返回地址的网络名称,“ip + net”。
func (n *IPNet) String() string
如RFC 4632和RFC 4291中定义的那样,字符串返回n的CIDR表示法,如“192.0.2.1/24”或“2001:db8 :: / 48”。如果掩码不是规范形式,则返回包含的IP地址,后跟一个斜杠字符和一个以十六进制形式表示的掩码,没有像“198.51.100.1/c000ff00”这样的标点符号。
接口表示网络接口名称和索引之间的映射。它也代表网络接口设施信息。
type Interface struct { Index int // positive integer that starts at one, zero is never used MTU int // maximum transmission unit Name string // e.g., "en0", "lo0", "eth0.100" HardwareAddr HardwareAddr // IEEE MAC-48, EUI-48 and EUI-64 form Flags Flags // e.g., FlagUp, FlagLoopback, FlagMulticast}
func InterfaceByIndex(index int) (*Interface, error)
InterfaceByIndex返回由index指定的接口。
在Solaris上,它将返回共享逻辑数据链接的逻辑网络接口之一; 为了更精确的使用InterfaceByName。
func InterfaceByName(name string) (*Interface, error)
InterfaceByName返回由名称指定的接口。
func (ifi *Interface) Addrs() ([]Addr, error)
Addrs返回特定接口的单播接口地址列表。
func (ifi *Interface) MulticastAddrs() ([]Addr, error)
MulticastAddrs返回一个特定接口的多播,加入组地址列表。
type InvalidAddrError string
func (e InvalidAddrError) Error() string
func (e InvalidAddrError) Temporary() bool
func (e InvalidAddrError) Timeout() bool
Listener 是面向流的协议的通用网络监听器。
多个goroutines可以同时调用Listener上的方法。
type Listener interface { // Accept waits for and returns the next connection to the listener. Accept() (Conn, error) // Close closes the listener. // Any blocked Accept operations will be unblocked and return errors. Close() error // Addr returns the listener's network address. Addr() Addr}
package mainimport ("io""log""net")func main() {// Listen on TCP port 2000 on all available unicast and// anycast IP addresses of the local system. l, err := net.Listen("tcp", ":2000")if err != nil { log.Fatal(err)} defer l.Close()for {// Wait for a connection. conn, err := l.Accept()if err != nil { log.Fatal(err)}// Handle the connection in a new goroutine.// The loop then returns to accepting, so that// multiple connections may be served concurrently. go func(c net.Conn) {// Echo all incoming data. io.Copy(c, c)// Shut down the connection. c.Close()}(conn)}}
func FileListener(f *os.File) (ln Listener, err error)
FileListener返回与打开文件f相对应的网络监听器的副本。在完成后关闭ln是来电者的责任。关闭ln不会影响f,关闭f不会影响ln。
func Listen(network, address string) (Listener, error)
Listen通知本地网络地址。
网络必须是“tcp”,“tcp4”,“tcp6”,“unix”或“unixpacket”。
对于TCP网络,如果地址参数中的主机为空或文字未指定的IP地址,则Listen会监听本地系统的所有可用单播和任播IP地址。要仅使用IPv4,请使用网络“tcp4”。该地址可以使用主机名称,但不建议这样做,因为它将为主机的至多一个IP地址创建一个监听器。如果地址参数中的端口为空或“0”,如“127.0.0.1:”或“:: 1:0”中所示,则会自动选择一个端口号。Listener的Addr方法可用于发现所选端口。
请参阅funcDial以获取网络和地址参数的说明。
MX代表单个DNS MX记录。
type MX struct { Host string Pref uint16}
NS表示单个DNS NS记录。
type NS struct { Host string}
OpError是通常由网络包中的函数返回的错误类型。它描述了错误的操作,网络类型和地址。
type OpError struct { // Op is the operation which caused the error, such as // "read" or "write". Op string // Net is the network type on which this error occurred, // such as "tcp" or "udp6". Net string // For operations involving a remote network connection, like // Dial, Read, or Write, Source is the corresponding local // network address. Source Addr // Addr is the network address for which this error occurred. // For local operations, like Listen or SetDeadline, Addr is // the address of the local endpoint being manipulated. // For operations involving a remote network connection, like // Dial, Read, or Write, Addr is the remote address of that // connection. Addr Addr // Err is the error that occurred during the operation. Err error}
func (e *OpError) Error() string
func (e *OpError) Temporary() bool
func (e *OpError) Timeout() bool
PacketConn是一种通用的面向数据包的网络连接。
多个goroutines可以同时调用PacketConn上的方法。
type PacketConn interface { // ReadFrom reads a packet from the connection, // copying the payload into b. It returns the number of // bytes copied into b and the return address that // was on the packet. // ReadFrom can be made to time out and return // an Error with Timeout() == true after a fixed time limit; // see SetDeadline and SetReadDeadline. ReadFrom(b []byte) (n int, addr Addr, err error) // WriteTo writes a packet with payload b to addr. // WriteTo can be made to time out and return // an Error with Timeout() == true after a fixed time limit; // see SetDeadline and SetWriteDeadline. // On packet-oriented connections, write timeouts are rare. WriteTo(b []byte, addr Addr) (n int, err error) // Close closes the connection. // Any blocked ReadFrom or WriteTo operations will be unblocked and return errors. Close() error // LocalAddr returns the local network address. LocalAddr() Addr // SetDeadline sets the read and write deadlines associated // with the connection. It is equivalent to calling both // SetReadDeadline and SetWriteDeadline. // // A deadline is an absolute time after which I/O operations // fail with a timeout (see type Error) instead of // blocking. The deadline applies to all future and pending // I/O, not just the immediately following call to ReadFrom or // WriteTo. After a deadline has been exceeded, the connection // can be refreshed by setting a deadline in the future. // // An idle timeout can be implemented by repeatedly extending // the deadline after successful ReadFrom or WriteTo calls. // // A zero value for t means I/O operations will not time out. SetDeadline(t time.Time) error // SetReadDeadline sets the deadline for future ReadFrom calls // and any currently-blocked ReadFrom call. // A zero value for t means ReadFrom will not time out. SetReadDeadline(t time.Time) error // SetWriteDeadline sets the deadline for future WriteTo calls // and any currently-blocked WriteTo call. // Even if write times out, it may return n > 0, indicating that // some of the data was successfully written. // A zero value for t means WriteTo will not time out. SetWriteDeadline(t time.Time) error}
func FilePacketConn(f *os.File) (c PacketConn, err error)
FilePacketConn返回与打开的文件f相对应的分组网络连接的副本。完成后关闭f是主叫方的责任。关闭c不会影响f,关闭f不会影响c。
func ListenPacket(network, address string) (PacketConn, error)
ListenPacket在本地网络地址上宣布。
网络必须是“udp”,“udp4”,“udp6”,“unixgram”或IP传输。IP传输是“ip”,“ip4”或“ip6”,后跟冒号和文字协议号或协议名称,如“ip:1”或“ip:icmp”中所示。
对于UDP和IP网络,如果地址参数中的主机为空或文字未指定的IP地址,则ListenPacket侦听本地系统除组播IP地址以外的所有可用IP地址。要仅使用IPv4,请使用网络“udp4”或“ip4:proto”。该地址可以使用主机名称,但不建议这样做,因为它将为主机的至多一个IP地址创建一个监听器。如果地址参数中的端口为空或“0”,如“127.0.0.1:”或“:: 1:0”中所示,则会自动选择一个端口号。PacketConn的LocalAddr方法可用于发现所选端口。
请参阅func Dial以获取网络和地址参数的说明。
ParseError是文字网络地址解析器的错误类型。
type ParseError struct { // Type is the type of string that was expected, such as // "IP address", "CIDR address". Type string // Text is the malformed text string. Text string}
func (e *ParseError) Error() string
Resolver查找名称和数字。
无*解析器相当于零解析器。
type Resolver struct { // PreferGo controls whether Go's built-in DNS resolver is preferred // on platforms where it's available. It is equivalent to setting // GODEBUG=netdns=go, but scoped to just this resolver. PreferGo bool // StrictErrors controls the behavior of temporary errors // (including timeout, socket errors, and SERVFAIL) when using // Go's built-in resolver. For a query composed of multiple // sub-queries (such as an A+AAAA address lookup, or walking the // DNS search list), this option causes such errors to abort the // whole query instead of returning a partial result. This is // not enabled by default because it may affect compatibility // with resolvers that process AAAA queries incorrectly. StrictErrors bool // Dial optionally specifies an alternate dialer for use by // Go's built-in DNS resolver to make TCP and UDP connections // to DNS services. The host in the address parameter will // always be a literal IP address and not a host name, and the // port in the address parameter will be a literal port number // and not a service name. // If the Conn returned is also a PacketConn, sent and received DNS // messages must adhere to RFC 1035 section 4.2.1, "UDP usage". // Otherwise, DNS messages transmitted over Conn must adhere // to RFC 7766 section 5, "Transport Protocol Selection". // If nil, the default dialer is used. Dial func(ctx context.Context, network, address string) (Conn, error)}
func (r *Resolver) LookupAddr(ctx context.Context, addr string) (names []string, err error)
LookupAddr对给定地址执行反向查找,返回映射到该地址的名称列表。
func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, err error)
LookupCNAME返回给定主机的规范名称。不关心规范名称的调用者可以直接调用LookupHost或LookupIP; 都将照顾解决规范名称作为查找的一部分。
规范名称是跟随零个或多个CNAME记录后的最终名称。只要主机解析为地址记录,则主机不包含DNS“CNAME”记录时,LookupCNAME不会返回错误。
func (r *Resolver) LookupHost(ctx context.Context, host string) (addrs []string, err error)
LookupHost使用本地解析器查找给定的主机。它返回该主机地址的一部分。
func (r *Resolver) LookupIPAddr(ctx context.Context, host string) ([]IPAddr, error)
LookupIPAddr使用本地解析器查找主机。它返回该主机的IPv4和IPv6地址的一部分。
func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error)
LookupMX返回给定域名的DNS MX记录,并按喜好排序。
func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error)
LookupNS返回给定域名的DNS NS记录。
func (r *Resolver) LookupPort(ctx context.Context, network, service string) (port int, err error)
LookupPort查找给定网络和服务的端口。
func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*SRV, err error)
LookupSRV尝试解析给定服务,协议和域名的SRV查询。原型是“tcp”或“udp”。返回的记录按优先级排序,并按优先级权重随机排序。
LookupSRV根据RFC 2782构建DNS名称以查找。也就是说,它查找_service._proto.name。为了适应以非标准名称发布SRV记录的服务,如果service和proto都是空字符串,LookupSRV将直接查找名称。
func (r *Resolver) LookupTXT(ctx context.Context, name string) ([]string, error)
LookupTXT返回给定域名的DNS TXT记录。
SRV代表单个DNS SRV记录。
type SRV struct { Target string Port uint16 Priority uint16 Weight uint16}
TCPAddr表示TCP端点的地址。
type TCPAddr struct { IP IP Port int Zone string // IPv6 scoped addressing zone}
func ResolveTCPAddr(network, address string) (*TCPAddr, error)
ResolveTCPAddr返回TCP结束点的地址。
网络必须是TCP网络名称。
如果地址参数中的主机不是文字IP地址或端口不是文字端口号,则ResolveTCPAddr将地址解析为TCP端点的地址。否则,它会将该地址解析为一对文字IP地址和端口号。地址参数可以使用主机名称,但不建议这样做,因为它最多只会返回一个主机名称的IP地址。
请参阅func Dial以获取网络和地址参数的说明。
func (a *TCPAddr) Network() string
网络返回地址的网络名称“tcp”。
func (a *TCPAddr) String() string
TCPConn是用于TCP网络连接的Conn接口的实现。
type TCPConn struct { // contains filtered or unexported fields}
func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error)
DialTCP的作用类似于TCP网络的拨号。
网络必须是TCP网络名称; 详情请参阅功能表。
如果laddr为零,则自动选择本地地址。如果raddr的IP字段为零或未指定的IP地址,则假定本地系统。
func (c *TCPConn) Close() error
Close关闭连接。
func (c *TCPConn) CloseRead() error
CloseRead关闭TCP连接的读取端。大多数呼叫者应该只使用关闭。
func (c *TCPConn) CloseWrite() error
CloseWrite关闭TCP连接的写入端。大多数呼叫者应该只使用关闭。
func (c *TCPConn) File() (f *os.File, err error)
File将底层os.File设置为阻止模式并返回副本。完成后关闭f是主叫方的责任。关闭c不会影响f,关闭f不会影响c。
返回的os.File的文件描述符与连接不同。尝试使用此副本更改原件的属性可能会或可能不会产生所需的效果。
func (c *TCPConn) LocalAddr() Addr
LocalAddr返回本地网络地址。返回的地址由LocalAddr的所有调用共享,所以不要修改它。
func (c *TCPConn) Read(b []byte) (int, error)
Read实现Conn Read方法。
func (c *TCPConn) ReadFrom(r io.Reader) (int64, error)
ReadFrom实现了io.ReaderFrom ReadFrom方法。
func (c *TCPConn) RemoteAddr() Addr
RemoteAddr返回远程网络地址。返回的地址由RemoteAddr的所有调用共享,所以不要修改它。
func (c *TCPConn) SetDeadline(t time.Time) error
SetDeadline实现Conn SetDeadline方法。
func (c *TCPConn) SetKeepAlive(keepalive bool) error
SetKeepAlive设置操作系统是否应该在连接上发送保持活动消息。
func (c *TCPConn) SetKeepAlivePeriod(d time.Duration) error
SetKeepAlivePeriod设置保持活动之间的时间间隔。
func (c *TCPConn) SetLinger(sec int) error
SetLinger在仍然有数据等待发送或被确认的连接上设置Close的行为。
如果sec <0(默认值),操作系统将在后台完成数据发送。
如果sec == 0,操作系统会丢弃任何未发送或未确认的数据。
如果sec> 0,则数据在sec <0时在后台发送。在某些操作系统中,经过秒秒后,剩余的未发送数据可能会被丢弃。
func (c *TCPConn) SetNoDelay(noDelay bool) error
SetNoDelay控制操作系统是否应该延迟数据包传输,希望发送更少的数据包(Nagle的算法)。缺省值为true(无延迟),这意味着在写入数据后尽快发送数据。
func (c *TCPConn) SetReadBuffer(bytes int) error
SetReadBuffer设置与连接关联的操作系统接收缓冲区的大小。
func (c *TCPConn) SetReadDeadline(t time.Time) error
SetReadDeadline实现Conn SetReadDeadline方法。
func (c *TCPConn) SetWriteBuffer(bytes int) error
SetWriteBuffer设置与连接关联的操作系统传输缓冲区的大小。
func (c *TCPConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline实现Conn SetWriteDeadline方法。
func (c *TCPConn) SyscallConn() (syscall.RawConn, error)
SyscallConn返回一个原始网络连接。这实现了syscall.Conn接口。
func (c *TCPConn) Write(b []byte) (int, error)
Write实现了Conn Write方法。
TCPListener是一个TCP网络监听器。客户端通常应该使用Listener类型的变量,而不是假设TCP。
type TCPListener struct { // contains filtered or unexported fields}
func ListenTCP(network string, laddr *TCPAddr) (*TCPListener, error)
ListenTCP的作用类似于监听TCP网络。
网络必须是TCP网络名称; 详情请参阅功能表。
如果laddr的IP字段为零或未指定IP地址,则ListenTCP侦听本地系统的所有可用单播和任播IP地址。如果laddr的端口字段为0,则会自动选择一个端口号。
func (l *TCPListener) Accept() (Conn, error)
Accept在Listener接口中实现Accept方法; 它等待下一个呼叫并返回一个通用的Conn。
func (l *TCPListener) AcceptTCP() (*TCPConn, error)
AcceptTCP接受下一个来电并返回新连接。
func (l *TCPListener) Addr() Addr
Addr返回侦听器的网络地址,一个* TCPAddr。Addr返回的所有调用共享,所以不要修改它。
func (l *TCPListener) Close() error
Close停止侦听TCP地址。已接受的连接未关闭。
func (l *TCPListener) File() (f *os.File, err error)
File返回底层os.File的副本,设置为阻塞模式。完成后关闭f是主叫方的责任。关闭l不会影响f,关闭f不会影响l。
返回的os.File的文件描述符与连接不同。尝试使用此副本更改原件的属性可能会或可能不会产生所需的效果。
func (l *TCPListener) SetDeadline(t time.Time) error
SetDeadline设置与侦听器关联的截止日期。零时间值禁用截止日期。
UDPAddr表示UDP端点的地址。
type UDPAddr struct { IP IP Port int Zone string // IPv6 scoped addressing zone}
func ResolveUDPAddr(network, address string) (*UDPAddr, error)
ResolveUDPAddr返回UDP端点的地址。
网络必须是UDP网络名称。
如果地址参数中的主机不是文字IP地址或端口不是文字端口号,则ResolveUDPAddr将地址解析为UDP端点的地址。否则,它会将该地址解析为一对文字IP地址和端口号。地址参数可以使用主机名称,但不建议这样做,因为它最多只会返回一个主机名称的IP地址。
请参阅func Dial以获取网络和地址参数的说明。
func (a *UDPAddr) Network() string
Network返回地址的网络名称“udp”。
func (a *UDPAddr) String() string
UDPConn是用于UDP网络连接的Conn和PacketConn接口的实现。
type UDPConn struct { // contains filtered or unexported fields}
func DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error)
DialUDP的作用类似于UDP网络的拨号。
网络必须是UDP网络名称; 详情请参阅功能表。
如果laddr为零,则自动选择本地地址。如果raddr的IP字段为零或未指定的IP地址,则假定本地系统。
func ListenMulticastUDP(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)
ListenMulticastUDP的作用类似于UDP网络的ListenPacket,但在特定的网络接口上采用组地址。
网络必须是UDP网络名称; 详情请参阅功能表。
ListenMulticastUDP监听本地系统的所有可用IP地址,包括组播组IP地址。如果ifi为零,ListenMulticastUDP使用系统分配的多播接口,但不建议这样做,因为分配取决于平台,有时可能需要路由配置。如果gaddr的端口字段为0,则会自动选择一个端口号。
ListenMulticastUDP只是为了方便简单的小应用程序。有一般用途的golang.org/x/net/ipv4和golang.org/x/net/ipv6软件包。
func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error)
ListenUDP就像UDP网络的ListenPacket一样。
网络必须是UDP网络名称; 详情请参阅功能表。
如果laddr的IP字段为零或未指定IP地址,则ListenUDP将侦听本地系统除组播IP地址以外的所有可用IP地址。如果laddr的端口字段为0,则会自动选择一个端口号。
func (c *UDPConn) Close() error
Close关闭连接。
func (c *UDPConn) File() (f *os.File, err error)
文件将底层os.File设置为阻止模式并返回副本。完成后关闭f是主叫方的责任。关闭c不会影响f,关闭f不会影响c。
返回的os.File的文件描述符与连接不同。尝试使用此副本更改原件的属性可能会或可能不会产生所需的效果。
func (c *UDPConn) LocalAddr() Addr
LocalAddr返回本地网络地址。返回的地址由LocalAddr的所有调用共享,所以不要修改它。
func (c *UDPConn) Read(b []byte) (int, error)
Read实现Conn Read方法。
func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error)
ReadFrom实现PacketConn ReadFrom方法。
func (c *UDPConn) ReadFromUDP(b []byte) (int, *UDPAddr, error)
ReadFromUDP的行为类似于ReadFrom,但返回一个UDPAddr。
func (c *UDPConn) ReadMsgUDP(b, oob []byte) (n, oobn, flags int, addr *UDPAddr, err error)
ReadMsgUDP从c读取消息,将有效载荷复制到b中,并将关联的带外数据复制到oob中。它返回复制到b中的字节数,复制到oob中的字节数,在消息上设置的标志以及消息的源地址。
软件包golang.org/x/net/ipv4和golang.org/x/net/ipv6可用于操作oob中的IP级套接字选项。
func (c *UDPConn) RemoteAddr() Addr
RemoteAddr返回远程网络地址。返回的地址由RemoteAddr的所有调用共享,所以不要修改它。
func (c *UDPConn) SetDeadline(t time.Time) error
SetDeadline实现Conn SetDeadline方法。
func (c *UDPConn) SetReadBuffer(bytes int) error
SetReadBuffer设置与连接关联的操作系统接收缓冲区的大小。
func (c *UDPConn) SetReadDeadline(t time.Time) error
SetReadDeadline实现Conn SetReadDeadline方法。
func (c *UDPConn) SetWriteBuffer(bytes int) error
SetWriteBuffer设置与连接关联的操作系统传输缓冲区的大小。
func (c *UDPConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline实现Conn SetWriteDeadline方法。
func (c *UDPConn) SyscallConn() (syscall.RawConn, error)
SyscallConn返回一个原始网络连接。这实现了syscall.Conn接口。
func (c *UDPConn) Write(b []byte) (int, error)
Write 实现了Conn Write方法。
func (c *UDPConn) WriteMsgUDP(b, oob []byte, addr *UDPAddr) (n, oobn int, err error)
如果c没有连接,WriteMsgUDP通过c向addr写入消息,如果连接c,则c写入远程地址(在这种情况下,addr必须为零)。有效载荷从b复制,并从oob复制相关的带外数据。它返回写入的有效负载和带外字节数。
软件包golang.org/x/net/ipv4和golang.org/x/net/ipv6可用于操作oob中的IP级套接字选项。
func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error)
WriteTo实现PacketConn WriteTo方法。
func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error)
WriteToUDP的行为与WriteTo类似,但需要一个UDPAddr。
UnixAddr表示Unix域套接字端点的地址。
type UnixAddr struct { Name string Net string}
func ResolveUnixAddr(network, address string) (*UnixAddr, error)
ResolveUnixAddr返回Unix域套接字端点的地址。
网络必须是Unix网络名称。
请参阅func Dial以获取网络和地址参数的说明。
func (a *UnixAddr) Network() string
Network返回地址的网络名称,“unix”,“unixgram”或“unixpacket”。
func (a *UnixAddr) String() string
UnixConn是用于连接到Unix域套接字的Conn接口的实现。
type UnixConn struct { // contains filtered or unexported fields}
func DialUnix(network string, laddr, raddr *UnixAddr) (*UnixConn, error)
DialUnix的行为就像拨号Unix网络。
network必须是Unix网络名称; 详情请参阅功能表。
如果laddr非零,则将其用作连接的本地地址。
func ListenUnixgram(network string, laddr *UnixAddr) (*UnixConn, error)
ListenUnixgram的作用类似于Unix网络的ListenPacket。
网络必须是“unixgram”。
func (c *UnixConn) Close() error
Close 关闭连接。
func (c *UnixConn) CloseRead() error
CloseRead关闭Unix域连接的读取端。大多数呼叫者应该只使用关闭。
func (c *UnixConn) CloseWrite() error
CloseWrite关闭了Unix域连接的写入端。大多数呼叫者应该只使用关闭。
func (c *UnixConn) File() (f *os.File, err error)
File将底层os.File设置为阻止模式并返回副本。完成后关闭f是主叫方的责任。关闭c不会影响f,关闭f不会影响c。
返回的os.File的文件描述符与连接不同。尝试使用此副本更改原件的属性可能会或可能不会产生所需的效果。
func (c *UnixConn) LocalAddr() Addr
LocalAddr返回本地网络地址。返回的地址由LocalAddr的所有调用共享,所以不要修改它。
func (c *UnixConn) Read(b []byte) (int, error)
Read实现Conn Read方法。
func (c *UnixConn) ReadFrom(b []byte) (int, Addr, error)
ReadFrom实现PacketConn ReadFrom方法。
func (c *UnixConn) ReadFromUnix(b []byte) (int, *UnixAddr, error)
ReadFromUnix的行为像ReadFrom,但返回一个UnixAddr。
func (c *UnixConn) ReadMsgUnix(b, oob []byte) (n, oobn, flags int, addr *UnixAddr, err error)
ReadMsgUnix从c读取消息,将有效载荷复制到b中,并将相关的带外数据复制到oob中。它返回复制到b中的字节数,复制到oob中的字节数,在消息上设置的标志以及消息的源地址。
请注意,如果len(b)== 0并且len(oob)> 0,则此函数仍会从连接读取(并放弃)1个字节。
func (c *UnixConn) RemoteAddr() Addr
RemoteAddr返回远程网络地址。返回的地址由RemoteAddr的所有调用共享,所以不要修改它。
func (c *UnixConn) SetDeadline(t time.Time) error
SetDeadline实现Conn SetDeadline方法。
func (c *UnixConn) SetReadBuffer(bytes int) error
SetReadBuffer设置与连接关联的操作系统接收缓冲区的大小。
func (c *UnixConn) SetReadDeadline(t time.Time) error
SetReadDeadline实现Conn SetReadDeadline方法。
func (c *UnixConn) SetWriteBuffer(bytes int) error
SetWriteBuffer设置与连接关联的操作系统传输缓冲区的大小。
func (c *UnixConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline实现Conn SetWriteDeadline方法。
func (c *UnixConn) SyscallConn() (syscall.RawConn, error)
SyscallConn返回一个原始网络连接。这实现了syscall.Conn接口。
func (c *UnixConn) Write(b []byte) (int, error)
Write实现了Conn Write方法。
func (c *UnixConn) WriteMsgUnix(b, oob []byte, addr *UnixAddr) (n, oobn int, err error)
WriteMsgUnix通过c向addr写入消息,从b复制有效载荷以及oob的相关带外数据。它返回写入的有效负载和带外字节数。
请注意,如果len(b)== 0且len(oob)> 0,则此函数仍将写入1个字节的连接。
func (c *UnixConn) WriteTo(b []byte, addr Addr) (int, error)
WriteTo实现PacketConn WriteTo方法。
func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (int, error)
WriteToUnix与WriteTo类似,但需要一个UnixAddr。
UnixListener是一个Unix域套接字监听器。客户端通常应该使用Listener类型的变量,而不是假设Unix域套接字。
type UnixListener struct { // contains filtered or unexported fields}
func ListenUnix(network string, laddr *UnixAddr) (*UnixListener, error)
ListenUnix就像Listen for Unix网络一样。
网络必须是“unix”或“unixpacket”。
func (l *UnixListener) Accept() (Conn, error)
Accept在Listener接口中实现Accept方法。返回的连接将是* UnixConn类型。
func (l *UnixListener) AcceptUnix() (*UnixConn, error)
AcceptUnix接受下一个来电并返回新连接。
func (l *UnixListener) Addr() Addr
Addr返回侦听器的网络地址。Addr返回的所有调用共享,所以不要修改它。
func (l *UnixListener) Close() error
Close停止监听Unix地址。已接受的连接未关闭。
func (l *UnixListener) File() (f *os.File, err error)
File返回底层os.File的副本,设置为阻塞模式。完成后关闭f是主叫方的责任。关闭l不会影响f,关闭f不会影响l。
返回的os.File的文件描述符与连接不同。尝试使用此副本更改原件的属性可能会或可能不会产生所需的效果。
func (l *UnixListener) SetDeadline(t time.Time) error
SetDeadline设置与侦听器关联的截止日期。零时间值禁用截止日期。
func (l *UnixListener) SetUnlinkOnClose(unlink bool)
SetUnlinkOnClose设置当侦听器关闭时是否应从文件系统中删除底层套接字文件。
默认行为是只有在package net创建套接字文件时才能解除套接字文件的链接。也就是说,当侦听器和底层套接字文件是通过调用Listen或ListenUnix创建的,那么默认关闭侦听器将删除套接字文件。但是如果侦听器是通过调用FileListener创建的,以使用已经存在的套接字文件,那么默认情况下,关闭侦听器将不会删除套接字文件。
type UnknownNetworkError string
func (e UnknownNetworkError) Error() string
func (e UnknownNetworkError) Temporary() bool
func (e UnknownNetworkError) Timeout() bool
☞ 在NaCl和Windows上,FileConn,FileListener和FilePacketConn函数未实现。
☞ 关于NaCl,与接口相关的方法和功能未实现。
☞ 在DragonFly BSD,NetBSD,OpenBSD,Plan 9和Solaris上,Interface的MulticastAddrs方法未实现。
☞ 在每个POSIX平台上,即使有可用空间,使用ReadFrom或ReadFromIP方法从“ip4”网络读取也可能不会返回完整的IPv4数据包,包括其头文件。即使在Read或ReadMsgIP可能返回完整数据包的情况下也可能发生这种情况。出于这个原因,如果接收完整数据包很重要,建议您不要使用这些方法。
Go 1兼容性准则使我们无法改变这些方法的行为; 改为使用Read或ReadMsgIP。
☞ 在NaCl,Plan 9和Windows上,IPConn的ReadMsgIP和WriteMsgIP方法未实现。
☞ 在Windows上,IPConn的File方法未实现。
☞ 在DragonFly BSD和OpenBSD上,侦听“tcp”和“udp”网络不会侦听IPv4和IPv6连接。这是因为IPv4流量不会路由到IPv6套接字 - 如果要支持两个地址系列,则需要两个单独的套接字。详情请参阅inet6(4)。
☞ 在Windows上,不执行syscall.RawConn的读写方法。
☞ 在NaCl和Plan 9中,syscall.RawConn的控制,读取和写入方法未实现。
☞ 在Windows上,TCPListener的File方法未实现。
☞ 在NaCl,Plan 9和Windows中,UDPConn的ReadMsgUDP和WriteMsgUDP方法未实现。
☞ 在Windows上,UDPConn的File方法未实现。
☞ 在NaCl上,ListenMulticastUDP功能未实现。
Name | Synopsis |
---|---|
http | 包http提供HTTP客户端和服务器实现。 |
cgi | 包cgi实现了RFC 3875中规定的CGI(通用网关接口) |
cookiejar | 包cookiejar实现了符合内存RFC 6265的http.CookieJar。 |
fcgi | 包fcgi实现FastCGI协议。 |
httptest | httptest包提供了用于HTTP测试的实用程序。 |
httptrace | 包httptrace提供跟踪HTTP客户端请求中的事件的机制。 |
httputil | 软件包httputil提供HTTP实用程序功能,补充了net/http软件包中较常见的功能。 |
pprof | 软件包pprof通过其HTTP服务器运行时分析数据以pprof可视化工具预期的格式提供服务。 |
包邮件实现邮件消息的解析。 | |
rpc | 软件包rpc通过网络或其他I/O连接提供对对象的导出方法的访问。 |
jsonrpc | 包jsonrpc为rpc包实现了一个JSON-RPC 1.0 ClientCodec和ServerCodec。 |
smtp | 包smtp实现了RFC 5321中定义的简单邮件传输协议 |
textproto | Package textproto以HTTP,NNTP和SMTP的风格实现对基于文本的请求/响应协议的通用支持。 |
url | 包url解析URL并实现查询转义。 |