net
包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。
虽然本包提供了对网络原语的访问,大部分使用者只需要 Dial
、Listen
和 Accept
函数提供的基本接口;以及相关的 Conn
和 Listener
接口。crypto/tls
包提供了相同的接口和类似的 Dial
和 Listen
函数。
类型
type Dialer
type Dialer struct {
// Timeout是dial操作等待连接建立的最大时长,默认值代表没有超时。
// 如果Deadline字段也被设置了,dial操作也可能更早失败。
// 不管有没有设置超时,操作系统都可能强制执行它的超时设置。
// 例如,TCP(系统)超时一般在3分钟左右。
Timeout time.Duration
// Deadline是一个具体的时间点期限,超过该期限后,dial操作就会失败。
// 如果Timeout字段也被设置了,dial操作也可能更早失败。
// 零值表示没有期限,即遵守操作系统的超时设置。
Deadline time.Time
// LocalAddr是dial一个地址时使用的本地地址。
// 该地址必须是与dial的网络相容的类型。
// 如果为nil,将会自动选择一个本地地址。
LocalAddr Addr
// DualStack允许单次dial操作在网络类型为"tcp",
// 且目的地是一个主机名的DNS记录具有多个地址时,
// 尝试建立多个IPv4和IPv6连接,并返回第一个建立的连接。
DualStack bool
// KeepAlive指定一个活动的网络连接的生命周期;如果为0,会禁止keep-alive。
// 不支持keep-alive的网络连接会忽略本字段。
KeepAlive time.Duration
}
提示
Dialer
类型包含与某个地址建立连接时的参数。每一个字段的零值都等价于没有该字段。因此调用 Dialer
零值的 Dial
方法等价于调用 Dial
函数。
接口
type Listener
type Listener interface {
// Addr返回该接口的网络地址
Addr() Addr
// Accept等待并返回下一个连接到该接口的连接
Accept() (c Conn, err error)
// Close关闭该接口,并使任何阻塞的Accept操作都会不再阻塞并返回错误。
Close() error
}
Listener
是一个用于面向流的网络协议的公用的网络监听器接口。多个线程可能会同时调用一个 Listener
的方法。
示例
// Listen on TCP port 2000 on all interfaces.
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 Dial
func Dial(network, address string) (Conn, error)
在网络 network 上连接地址 address,并返回一个 Conn 接口。可用的网络类型有:
tcp
、tcp4
、tcp6
、udp
、udp4
、udp6
、ip
、ip4
、ip6
、unix
、unixgram
、unixpacket
对TCP和UDP网络,地址格式是 host:port
或 [host]:port
,参见函数 JoinHostPort
和 SplitHostPort
。
func DialTimeout
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
DialTimeout
类似 Dial
但采用了超时。timeout
参数如果必要可包含名称解析。
func Pipe
func Pipe() (Conn, Conn)
Pipe
创建一个内存中的同步、全双工网络连接。连接的两端都实现了 Conn
接口。一端的读取对应另一端的写入,直接将数据在两端之间作拷贝,没有内部缓冲。
func Listen
func Listen(net, laddr string) (Listener, error)
返回在一个本地网络地址 laddr
上监听的 Listener
。网络类型参数net必须是面向流的网络:tcp
、tcp4
、tcp6
、unix
或 unixpacket
。