Пакет net
Обзор
Пакет net предоставляет переносимый интерфейс для сетевого ввода-вывода, включая TCP/IP, UDP, разрешение доменных имён и сокеты домена Unix.
Хотя пакет предоставляет доступ к низкоуровневым сетевым примитивам, большинству клиентов потребуются только базовый интерфейс, предоставляемый функциями Dial, Listen и Accept, а также связанные с ними интерфейсы Conn и Listener. Пакет crypto/tls использует те же интерфейсы и похожие функции Dial и Listen.
Функция Dial устанавливает соединение с сервером:
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, или резолвер на основе cgo, который вызывает процедуры библиотеки C, такие как getaddrinfo и getnameinfo.
В Unix чистый резолвер Go предпочтительнее резолвера cgo, поскольку заблокированный DNS-запрос занимает только горутину, тогда как заблокированный вызов C занимает поток операционной системы. Если cgo доступен, вместо него при различных условиях используется резолвер на основе cgo: в системах, которые не позволяют программам отправлять DNS-запросы напрямую (OS X); если задана переменная окружения LOCALDOMAIN (даже если она пуста); если переменная окружения RES_OPTIONS или HOSTALIASES непуста; если переменная окружения ASR_CONFIG непуста (только OpenBSD); а также если в /etc/resolv.conf или /etc/nsswitch.conf указано использование возможностей, не реализованных резолвером Go.
Во всех системах (кроме Plan 9), когда используется резолвер cgo, этот пакет ограничивает количество параллельных вызовов cgo, чтобы предотвратить исчерпание системных потоков. В настоящее время ограничение составляет 500 параллельных запросов.
Решение о выборе резолвера можно переопределить, задав значение netdns переменной окружения GODEBUG (см. пакет runtime) равным go или cgo, например:
export GODEBUG=netdns=go # force pure Go resolver export GODEBUG=netdns=cgo # force native resolver (cgo, win32)
Принудительно задать выбор также можно при сборке дерева исходного кода Go, установив тег сборки netgo или netcgo. Тег сборки netgo полностью отключает использование встроенного (CGO) резолвера, то есть единственным доступным резолвером будет резолвер Go. При использовании тега сборки netcgo встроенный и чистый резолвер Go компилируются в двоичный файл, но предпочтение отдаётся встроенному (CGO) резолверу. При использовании netcgo резолвер Go всё ещё можно принудительно включить во время выполнения с помощью GODEBUG=netdns=go.
Числовое значение netdns, например GODEBUG=netdns=1, заставляет резолвер выводить отладочную информацию о принятых решениях. Чтобы принудительно выбрать определённый резолвер и одновременно включить вывод отладочной информации, объедините два значения знаком «плюс», например GODEBUG=netdns=go+1.
Резолвер Go отправляет с DNS-запросом дополнительный заголовок EDNS0, сообщая о готовности принимать DNS-пакеты большего размера. По имеющимся сведениям, это может вызывать периодические сбои при работе с DNS-серверами некоторых модемов и маршрутизаторов. Установка GODEBUG=netedns0=0 отключает отправку дополнительного заголовка.
В macOS, если код Go, использующий пакет net, собран с параметром -buildmode=c-archive, при компоновке полученного архива в программу на C необходимо передать параметр -lresolv.
В Plan 9 резолвер всегда обращается к /net/cs и /net/dns.
В Windows в Go 1.18.x и более ранних версиях резолвер всегда использовал функции библиотеки C, такие как GetAddrInfo и DnsQuery.
Указатель
Примеры
Файлы пакета
addrselect.go cgo_linux.go cgo_resnew.go cgo_socknew.go cgo_unix.go cgo_unix_cgo.go cgo_unix_cgo_res.go conf.go dial.go dnsclient.go dnsclient_unix.go dnsconfig.go dnsconfig_unix.go error_posix.go error_unix.go fd_posix.go fd_unix.go file.go file_posix.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 mptcpsock_linux.go net.go netcgo_off.go netgo_off.go nss.go parse.go pipe.go port.go port_unix.go rawconn.go rlimit_unix.go sendfile.go sendfile_nonwindows.go sock_cloexec.go sock_linux.go sock_posix.go sockaddr_posix.go sockopt_linux.go sockopt_posix.go sockoptip4_linux.go sockoptip6_posix.go splice_linux.go tcpsock.go tcpsock_posix.go tcpsock_unix.go tcpsockopt_posix.go tcpsockopt_unix.go udpsock.go udpsock_posix.go unixsock.go unixsock_posix.go unixsock_readmsg_cmsg_cloexec.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 — резолвер, используемый функциями Lookup на уровне пакета и Dialer, для которых не задан Resolver.
var DefaultResolver = &Resolver{} ErrClosed — ошибка, возвращаемая при вызове операции ввода-вывода для сетевого соединения, которое уже закрыто или закрывается другой горутиной до завершения операции ввода-вывода. Она может быть обёрнута в другую ошибку; обычно её следует проверять с помощью errors.Is(err, net.ErrClosed).
var ErrClosed error = errClosed
Различные ошибки, содержащиеся в OpError.
var (
ErrWriteToConnected = errors.New("use of WriteTo with pre-connected connection")
) func JoinHostPort
func JoinHostPort(host, port string) string
JoinHostPort объединяет хост и порт в сетевой адрес вида "host:port". Если хост содержит двоеточие, как в буквальных IPv6-адресах, JoinHostPort возвращает "[host]:port".
Описание параметров host и port см. в функции Dial.
func LookupAddr
func LookupAddr(addr string) (names []string, err error)
LookupAddr выполняет обратный поиск для указанного адреса и возвращает список имён, соответствующих этому адресу.
Возвращаемые имена проверяются на соответствие формату представления доменных имён. Если в ответе содержатся некорректные имена, соответствующие записи отфильтровываются; вместе с оставшимися результатами, если они есть, возвращается ошибка.
При использовании системного резолвера библиотеки C возвращается не более одного результата. Чтобы обойти системный резолвер, используйте собственный Resolver.
LookupAddr использует внутри context.Background; чтобы указать контекст, используйте Resolver.LookupAddr.
func LookupCNAME
func LookupCNAME(host string) (cname string, err error)
LookupCNAME возвращает каноническое имя указанного хоста. Если вызывающему коду каноническое имя не требуется, можно напрямую вызвать LookupHost или LookupIP; обе функции разрешают каноническое имя в ходе поиска.
Каноническое имя — это итоговое имя после перехода по нулю или нескольким записям CNAME. LookupCNAME не возвращает ошибку, если хост не содержит DNS-записей "CNAME", при условии что для хоста найдены записи адресов.
Возвращаемое каноническое имя проверяется на соответствие формату представления доменных имён.
LookupCNAME использует внутри context.Background; чтобы указать контекст, используйте Resolver.LookupCNAME.
func LookupHost
func LookupHost(host string) (addrs []string, err error)
LookupHost ищет указанный хост с помощью локального резолвера. Функция возвращает срез адресов этого хоста.
LookupHost использует внутри context.Background; чтобы указать контекст, используйте Resolver.LookupHost.
func LookupPort
func LookupPort(network, service string) (port int, err error)
LookupPort ищет порт для указанной сети и службы.
LookupPort использует внутри context.Background; чтобы указать контекст, используйте Resolver.LookupPort.
func LookupTXT
func LookupTXT(name string) ([]string, error)
LookupTXT возвращает DNS-записи TXT для указанного доменного имени.
Если DNS-запись TXT содержит несколько строк, они объединяются в одну строку.
LookupTXT использует внутри context.Background; чтобы указать контекст, используйте Resolver.LookupTXT.
func ParseCIDR
func ParseCIDR(s string) (IP, *IPNet, error)
ParseCIDR разбирает строку s как IP-адрес в нотации CIDR с длиной префикса, например "192.0.2.0/24" или "2001:db8::/32", согласно определениям RFC 4632 и RFC 4291.
Функция возвращает IP-адрес и сеть, определяемую IP-адресом и длиной префикса. Например, ParseCIDR("192.0.2.1/24") возвращает IP-адрес 192.0.2.1 и сеть 192.0.2.0/24.
Пример
Код:
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)
Вывод:
192.0.2.1 192.0.2.0/24 2001:db8:a0b:12f0::1 2001:db8::/32
func Pipe
func Pipe() (Conn, Conn)
Pipe создает синхронное полнодуплексное сетевое соединение в памяти; оба конца реализуют интерфейс Conn. Чтения на одном конце сопоставляются с записями на другом, напрямую копируя данные между ними; внутренней буферизации нет.
func SplitHostPort
func SplitHostPort(hostport string) (host, port string, err error)
SplitHostPort разделяет сетевой адрес формата "host:port", "host%zone:port", "[host]:port" или "[host%zone]:port" на host или host%zone и port.
Литеральный IPv6-адрес в hostport должен быть заключен в квадратные скобки, например "[::1]:80", "[::1%lo0]:80".
Описание параметра hostport и результатов host и port см. в описании функции Dial.
type Addr
Addr представляет адрес конечной точки сети.
Два метода Addr.Network и Addr.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")
} func InterfaceAddrs
func InterfaceAddrs() ([]Addr, error)
InterfaceAddrs возвращает список одноадресных адресов интерфейсов системы.
В возвращаемом списке не указан соответствующий интерфейс; для получения дополнительных сведений используйте Interfaces и Interface.Addrs.
type AddrError
type AddrError struct {
Err string
Addr string
}
func (*AddrError) Error
func (e *AddrError) Error() string
func (*AddrError) Temporary
func (e *AddrError) Temporary() bool
func (*AddrError) Timeout
func (e *AddrError) Timeout() bool
type Buffers 1.8
Buffers содержит ноль или более последовательностей байтов для записи.
На некоторых машинах и для некоторых типов соединений это оптимизируется до пакетной операции записи, специфичной для ОС (например, "writev").
type Buffers [][]byte
func (*Buffers) Read 1.8
func (v *Buffers) Read(p []byte) (n int, err error)
Читает данные из буферов.
Read реализует интерфейс io.Reader для Buffers.
Read изменяет срез v, а также v[i] для 0 <= i < len(v), но не изменяет v[i][j] для любых i, j.
func (*Buffers) WriteTo 1.8
func (v *Buffers) WriteTo(w io.Writer) (n int64, err error)
WriteTo записывает содержимое буферов в w.
WriteTo реализует интерфейс io.WriterTo для Buffers.
WriteTo изменяет срез v, а также v[i] для 0 <= i < len(v), но не изменяет v[i][j] для любых i, j.
type Conn
Conn — это обобщенное потоковое сетевое соединение.
Несколько горутин могут одновременно вызывать методы Conn.
type Conn interface {
// Read reads data from the connection.
// Read can be made to time out and return an error 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 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 may or may not block until any buffered data is sent;
// for TCP connections see [*TCPConn.SetLinger].
Close() error
// LocalAddr returns the local network address, if known.
LocalAddr() Addr
// RemoteAddr returns the remote network address, if known.
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 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.
//
// If the deadline is exceeded a call to Read or Write or to other
// I/O methods will return an error that wraps os.ErrDeadlineExceeded.
// This can be tested using errors.Is(err, os.ErrDeadlineExceeded).
// The error's Timeout method will return true, but note that there
// are other possible errors for which the Timeout method will
// return true even if the deadline has not been exceeded.
//
// 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
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 адрес имеет формат "host:port". В качестве host должен быть указан буквальный IP-адрес или имя хоста, которое можно разрешить в IP-адреса. В качестве port должен быть указан буквальный номер порта или имя службы. Если host — буквальный IPv6-адрес, его необходимо заключить в квадратные скобки, например "[2001:db8::1]:80" или "[fe80::1%zone]:80". Зона определяет область действия буквального IPv6-адреса согласно RFC 4007. Функции JoinHostPort и SplitHostPort работают с парой host и port в этом формате. При использовании TCP, если host разрешается в несколько 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", за которым следуют двоеточие и буквальный номер протокола либо его имя, а адрес имеет формат "host". В качестве host должен быть указан буквальный 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, если host пуст или указан буквальный неопределенный IP-адрес, например ":80", "0.0.0.0:80" или "[::]:80" для TCP и UDP, а также "", "0.0.0.0" или "::" для IP, предполагается локальная система.
Для сетей Unix адрес должен быть путем в файловой системе.
func DialTimeout
func DialTimeout(network, address string, timeout time.Duration) (Conn, error)
DialTimeout действует подобно Dial, но принимает время ожидания.
Время ожидания включает разрешение имени, если оно требуется. При использовании TCP, если host в параметре address разрешается в несколько IP-адресов, время ожидания распределяется между последовательными попытками подключения, так что каждой из них выделяется соответствующая доля времени.
Описание параметров network и address см. в описании функции Dial.
func FileConn
func FileConn(f *os.File) (c Conn, err error)
FileConn возвращает копию сетевого соединения, соответствующего открытому файлу f. После завершения работы вызывающий код должен закрыть f. Закрытие c не влияет на f, а закрытие f не влияет на c.
type DNSConfigError
DNSConfigError представляет ошибку чтения конфигурации DNS компьютера. (Больше не используется; сохранен для совместимости.)
type DNSConfigError struct {
Err error
}
func (*DNSConfigError) Error
func (e *DNSConfigError) Error() string
func (*DNSConfigError) Temporary
func (e *DNSConfigError) Temporary() bool
func (*DNSConfigError) Timeout
func (e *DNSConfigError) Timeout() bool
func (*DNSConfigError) Unwrap 1.13
func (e *DNSConfigError) Unwrap() error
type DNSError
DNSError представляет ошибку поиска DNS.
type DNSError struct {
UnwrapErr error // error returned by the [DNSError.Unwrap] method, might be nil; added in Go 1.23
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; added in Go 1.6
// IsNotFound is set to true when the requested name does not
// contain any records of the requested type (data not found),
// or the name itself was not found (NXDOMAIN).
IsNotFound bool // Go 1.13
}
func (*DNSError) Error
func (e *DNSError) Error() string
func (*DNSError) Temporary
func (e *DNSError) Temporary() bool
Temporary сообщает, известно ли, что ошибка DNS носит временный характер. Это не всегда известно: поиск DNS может завершиться с временной ошибкой и вернуть DNSError, для которого Temporary возвращает false.
func (*DNSError) Timeout
func (e *DNSError) Timeout() bool
Timeout сообщает, известно ли, что время ожидания поиска DNS истекло. Это не всегда известно: поиск DNS может завершиться из-за истечения времени ожидания и вернуть DNSError, для которого Timeout возвращает false.
func (*DNSError) Unwrap 1.23
func (e *DNSError) Unwrap() error
Unwrap возвращает e.UnwrapErr.
type Dialer 1.1
Dialer содержит параметры для подключения к адресу.
Нулевое значение каждого поля эквивалентно подключению без соответствующего параметра. Поэтому подключение с нулевым значением Dialer эквивалентно простому вызову функции Dial.
Методы Dialer можно безопасно вызывать параллельно.
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 previously enabled RFC 6555 Fast Fallback
// support, also known as "Happy Eyeballs", in which IPv4 is
// tried soon if IPv6 appears to be misconfigured and
// hanging.
//
// Deprecated: Fast Fallback is enabled by default. To
// disable, set FallbackDelay to a negative value.
DualStack bool // Go 1.2
// FallbackDelay specifies the length of time to wait before
// spawning a RFC 6555 Fast Fallback connection.
//
// When dialing "tcp" and both IPv6 and IPv4 addresses are
// available, the address family of the first resolved address
// is treated as the primary. After FallbackDelay, a connection
// attempt to the other address family is started if the primary
// connection has not yet succeeded.
//
// If zero, a default delay of 300ms is used.
// A negative value disables Fast Fallback support.
FallbackDelay time.Duration // Go 1.5
// KeepAlive specifies the interval between keep-alive
// probes for an active network connection.
//
// KeepAlive is ignored if KeepAliveConfig.Enable is true.
//
// If zero, keep-alive probes are sent with a default value
// (currently 15 seconds), if supported by the protocol and operating
// system. Network protocols or operating systems that do
// not support keep-alive ignore this field.
// If negative, keep-alive probes are disabled.
KeepAlive time.Duration // Go 1.3
// KeepAliveConfig specifies the keep-alive probe configuration
// for an active network connection, when supported by the
// protocol and operating system.
//
// If KeepAliveConfig.Enable is true, keep-alive probes are enabled.
// If KeepAliveConfig.Enable is false and KeepAlive is negative,
// keep-alive probes are disabled.
KeepAliveConfig KeepAliveConfig // Go 1.23
// Resolver optionally specifies an alternate resolver to use.
Resolver *Resolver // Go 1.8
// Cancel is an optional channel whose closure indicates that
// the dial should be canceled. Not all types of dials support
// cancellation.
//
// Deprecated: Use DialContext instead.
Cancel <-chan struct{} // Go 1.6
// If Control is not nil, it is called after creating the network
// connection but before actually dialing.
//
// Network and address parameters passed to Control function are not
// necessarily the ones passed to Dial. Calling Dial with TCP networks
// will cause the Control function to be called with "tcp4" or "tcp6",
// UDP networks become "udp4" or "udp6", IP networks become "ip4" or "ip6",
// and other known networks are passed as-is.
//
// Control is ignored if ControlContext is not nil.
Control func(network, address string, c syscall.RawConn) error // Go 1.11
// If ControlContext is not nil, it is called after creating the network
// connection but before actually dialing.
//
// Network and address parameters passed to ControlContext function are not
// necessarily the ones passed to Dial. Calling Dial with TCP networks
// will cause the ControlContext function to be called with "tcp4" or "tcp6",
// UDP networks become "udp4" or "udp6", IP networks become "ip4" or "ip6",
// and other known networks are passed as-is.
//
// If ControlContext is not nil, Control is ignored.
ControlContext func(ctx context.Context, network, address string, c syscall.RawConn) error // Go 1.20
// contains filtered or unexported fields
}
Пример
Код:
var d net.Dialer
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
conn, err := d.DialContext(ctx, "tcp", "localhost:12345")
if err != nil {
log.Fatalf("Failed to dial: %v", err)
}
defer conn.Close()
if _, err := conn.Write([]byte("Hello, World!")); err != nil {
log.Fatal(err)
}
Пример (Unix)
Код:
// DialUnix does not take a context.Context parameter. This example shows
// how to dial a Unix socket with a Context. Note that the Context only
// applies to the dial operation; it does not apply to the connection once
// it has been established.
var d net.Dialer
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
d.LocalAddr = nil // if you have a local addr, add it here
raddr := net.UnixAddr{Name: "/path/to/unix.sock", Net: "unix"}
conn, err := d.DialContext(ctx, "unix", raddr.String())
if err != nil {
log.Fatalf("Failed to dial: %v", err)
}
defer conn.Close()
if _, err := conn.Write([]byte("Hello, socket!")); err != nil {
log.Fatal(err)
}
func (*Dialer) Dial 1.1
func (d *Dialer) Dial(network, address string) (Conn, error)
Dial устанавливает соединение с адресом в указанной сети.
Описание параметров сети и адреса см. в функции Dial.
Внутри Dial используется context.Background; чтобы указать контекст, используйте Dialer.DialContext.
func (*Dialer) DialContext 1.7
func (d *Dialer) DialContext(ctx context.Context, network, address string) (Conn, error)
DialContext устанавливает соединение с адресом в указанной сети, используя предоставленный контекст.
Предоставленный Context не должен быть nil. Если срок действия контекста истекает до завершения соединения, возвращается ошибка. После успешного установления соединения истечение срока действия контекста не повлияет на соединение.
При использовании TCP, если имя узла в параметре адреса разрешается в несколько сетевых адресов, любой тайм-аут дозвона (из d.Timeout или ctx) распределяется между последовательными попытками дозвона так, чтобы каждой отводилась соответствующая доля времени на установление соединения. Например, если у узла есть 4 IP-адреса, а тайм-аут составляет 1 минуту, на установление соединения с каждым отдельным адресом отводится 15 секунд, после чего выполняется попытка со следующим адресом.
Описание параметров сети и адреса см. в функции Dial.
func (*Dialer) DialIP 1.26
func (d *Dialer) DialIP(ctx context.Context, network string, laddr netip.Addr, raddr netip.Addr) (*IPConn, error)
DialIP действует как Dial для IP-сетей, используя предоставленный контекст.
Предоставленный Context не должен быть nil. Если срок действия контекста истекает до завершения соединения, возвращается ошибка. После успешного установления соединения истечение срока действия контекста не повлияет на соединение.
Имя сети должно обозначать IP-сеть; подробности см. в функции Dial.
func (*Dialer) DialTCP 1.26
func (d *Dialer) DialTCP(ctx context.Context, network string, laddr netip.AddrPort, raddr netip.AddrPort) (*TCPConn, error)
DialTCP действует как Dial для TCP-сетей, используя предоставленный контекст.
Предоставленный Context не должен быть nil. Если срок действия контекста истекает до завершения соединения, возвращается ошибка. После успешного установления соединения истечение срока действия контекста не повлияет на соединение.
Имя сети должно обозначать TCP-сеть; подробности см. в функции Dial.
func (*Dialer) DialUDP 1.26
func (d *Dialer) DialUDP(ctx context.Context, network string, laddr netip.AddrPort, raddr netip.AddrPort) (*UDPConn, error)
DialUDP действует как Dial для UDP-сетей, используя предоставленный контекст.
Предоставленный Context не должен быть nil. Если срок действия контекста истекает до завершения соединения, возвращается ошибка. После успешного установления соединения истечение срока действия контекста не повлияет на соединение.
Имя сети должно обозначать UDP-сеть; подробности см. в функции Dial.
func (*Dialer) DialUnix 1.26
func (d *Dialer) DialUnix(ctx context.Context, network string, laddr *UnixAddr, raddr *UnixAddr) (*UnixConn, error)
DialUnix действует как Dial для Unix-сетей, используя предоставленный контекст.
Предоставленный Context не должен быть nil. Если срок действия контекста истекает до завершения соединения, возвращается ошибка. После успешного установления соединения истечение срока действия контекста не повлияет на соединение.
Имя сети должно обозначать Unix-сеть; подробности см. в функции Dial.
func (*Dialer) MultipathTCP 1.21
func (d *Dialer) MultipathTCP() bool
MultipathTCP сообщает, будет ли использоваться MPTCP.
Этот метод не проверяет, поддерживается ли MPTCP операционной системой.
func (*Dialer) SetMultipathTCP 1.21
func (d *Dialer) SetMultipathTCP(use bool)
SetMultipathTCP указывает методам Dial использовать или не использовать MPTCP, если он поддерживается операционной системой. Этот метод переопределяет системное значение по умолчанию и настройку GODEBUG=multipathtcp=..., если она задана.
Если MPTCP недоступен на узле или не поддерживается сервером, методы Dial переключатся на TCP.
type Error
Error представляет сетевую ошибку.
type Error interface {
error
Timeout() bool // Is the error a timeout?
// Deprecated: Temporary errors are not well-defined.
// Most "temporary" errors are timeouts, and the few exceptions are surprising.
// Do not use this method.
Temporary() bool
} type Flags
type Flags uint
const (
FlagUp Flags = 1 << iota // interface is administratively 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
FlagRunning // interface is in running state
) func (Flags) String
func (f Flags) String() string
type HardwareAddr
HardwareAddr представляет физический аппаратный адрес.
type HardwareAddr []byte
func ParseMAC
func ParseMAC(s string) (hw HardwareAddr, err error)
ParseMAC разбирает s как MAC-48, EUI-48, EUI-64 в формате IEEE 802 или адрес канального уровня IP поверх InfiniBand длиной 20 октетов в одном из следующих форматов:
00:00:5e:00:53:01 02:00:5e:10:00:00:00:01 00:00:00:00:fe:80:00:00:00:00:00:00:02:00:5e:10:00:00:00:01 00-00-5e-00-53-01 02-00-5e-10-00-00-00-01 00-00-00-00-fe-80-00-00-00-00-00-00-02-00-5e-10-00-00-00-01 0000.5e00.5301 0200.5e10.0000.0001 0000.0000.fe80.0000.0000.0000.0200.5e10.0000.0001 00005e005301
func (HardwareAddr) String
func (a HardwareAddr) String() string
type IP
IP — это отдельный IP-адрес, срез байтов. Функции этого пакета принимают на вход срезы длиной 4 байта (IPv4) или 16 байт (IPv6).
Обратите внимание, что в этой документации обозначение IP-адреса как адреса IPv4 или IPv6 является семантическим свойством адреса, а не только длиной среза байтов: срез длиной 16 байт всё ещё может представлять адрес IPv4.
type IP []byte
func IPv4
func IPv4(a, b, c, d byte) IP
IPv4 возвращает IP-адрес (в 16-байтовом представлении) адреса IPv4 a.b.c.d.
Пример
Код:
fmt.Println(net.IPv4(8, 8, 8, 8))
Вывод:
8.8.8.8
func LookupIP
func LookupIP(host string) ([]IP, error)
LookupIP выполняет поиск host с помощью локального распознавателя имен. Функция возвращает срез адресов IPv4 и IPv6 этого узла.
func ParseIP
func ParseIP(s string) IP
ParseIP разбирает s как IP-адрес и возвращает результат. Строка s может быть записана в десятичном формате IPv4 с точками ("192.0.2.1"), в формате IPv6 ("2001:db8::68") или в формате IPv4, отображённом в IPv6 ("::ffff:192.0.2.1"). Если s не является допустимым текстовым представлением IP-адреса, ParseIP возвращает nil. Возвращаемый адрес всегда имеет длину 16 байт; адреса IPv4 возвращаются в формате IPv4, отображённом в IPv6.
Пример
Код:
fmt.Println(net.ParseIP("192.0.2.1"))
fmt.Println(net.ParseIP("2001:db8::68"))
fmt.Println(net.ParseIP("192.0.2"))
Вывод:
192.0.2.1 2001:db8::68 <nil>
func (IP) AppendText 1.24
func (ip IP) AppendText(b []byte) ([]byte, error)
AppendText реализует интерфейс encoding.TextAppender. Кодирование совпадает с возвращаемым IP.String, за исключением следующего: если len(ip) равен нулю, ничего не добавляется.
func (IP) DefaultMask
func (ip IP) DefaultMask() IPMask
DefaultMask возвращает маску IP по умолчанию для IP-адреса ip. Маски по умолчанию есть только у адресов IPv4; если ip не является допустимым адресом IPv4, DefaultMask возвращает nil.
Пример
Код:
ip := net.ParseIP("192.0.2.1")
fmt.Println(ip.DefaultMask())
Вывод:
ffffff00
func (IP) Equal
func (ip IP) Equal(x IP) bool
Equal сообщает, являются ли ip и x одним и тем же IP-адресом. Адрес IPv4 и тот же адрес в формате IPv6 считаются равными.
Пример
Код:
ipv4DNS := net.ParseIP("8.8.8.8")
ipv4Lo := net.ParseIP("127.0.0.1")
ipv6DNS := net.ParseIP("0:0:0:0:0:FFFF:0808:0808")
fmt.Println(ipv4DNS.Equal(ipv4DNS))
fmt.Println(ipv4DNS.Equal(ipv4Lo))
fmt.Println(ipv4DNS.Equal(ipv6DNS))
Вывод:
true false true
func (IP) IsGlobalUnicast
func (ip IP) IsGlobalUnicast() bool
IsGlobalUnicast сообщает, является ли ip глобальным одноадресным адресом.
Для определения глобальных одноадресных адресов используется идентификация типа адреса, определённая в RFC 1122, RFC 4632 и RFC 4291, за исключением направленных широковещательных IPv4-адресов. Метод возвращает true, даже если ip входит в диапазон частных IPv4-адресов или локальных одноадресных IPv6-адресов.
Пример
Код:
ipv6Global := net.ParseIP("2000::")
ipv6UniqLocal := net.ParseIP("2000::")
ipv6Multi := net.ParseIP("FF00::")
ipv4Private := net.ParseIP("10.255.0.0")
ipv4Public := net.ParseIP("8.8.8.8")
ipv4Broadcast := net.ParseIP("255.255.255.255")
fmt.Println(ipv6Global.IsGlobalUnicast())
fmt.Println(ipv6UniqLocal.IsGlobalUnicast())
fmt.Println(ipv6Multi.IsGlobalUnicast())
fmt.Println(ipv4Private.IsGlobalUnicast())
fmt.Println(ipv4Public.IsGlobalUnicast())
fmt.Println(ipv4Broadcast.IsGlobalUnicast())
Вывод:
true true false true true false
func (IP) IsInterfaceLocalMulticast
func (ip IP) IsInterfaceLocalMulticast() bool
IsInterfaceLocalMulticast сообщает, является ли ip многоадресным адресом с областью действия интерфейса.
Пример
Код:
ipv6InterfaceLocalMulti := net.ParseIP("ff01::1")
ipv6Global := net.ParseIP("2000::")
ipv4 := net.ParseIP("255.0.0.0")
fmt.Println(ipv6InterfaceLocalMulti.IsInterfaceLocalMulticast())
fmt.Println(ipv6Global.IsInterfaceLocalMulticast())
fmt.Println(ipv4.IsInterfaceLocalMulticast())
Вывод:
true false false
func (IP) IsLinkLocalMulticast
func (ip IP) IsLinkLocalMulticast() bool
IsLinkLocalMulticast сообщает, является ли ip многоадресным адресом с областью действия канала.
Пример
Код:
ipv6LinkLocalMulti := net.ParseIP("ff02::2")
ipv6LinkLocalUni := net.ParseIP("fe80::")
ipv4LinkLocalMulti := net.ParseIP("224.0.0.0")
ipv4LinkLocalUni := net.ParseIP("169.254.0.0")
fmt.Println(ipv6LinkLocalMulti.IsLinkLocalMulticast())
fmt.Println(ipv6LinkLocalUni.IsLinkLocalMulticast())
fmt.Println(ipv4LinkLocalMulti.IsLinkLocalMulticast())
fmt.Println(ipv4LinkLocalUni.IsLinkLocalMulticast())
Вывод:
true false true false
func (IP) IsLinkLocalUnicast
func (ip IP) IsLinkLocalUnicast() bool
IsLinkLocalUnicast сообщает, является ли ip одноадресным адресом с областью действия канала.
Пример
Код:
ipv6LinkLocalUni := net.ParseIP("fe80::")
ipv6Global := net.ParseIP("2000::")
ipv4LinkLocalUni := net.ParseIP("169.254.0.0")
ipv4LinkLocalMulti := net.ParseIP("224.0.0.0")
fmt.Println(ipv6LinkLocalUni.IsLinkLocalUnicast())
fmt.Println(ipv6Global.IsLinkLocalUnicast())
fmt.Println(ipv4LinkLocalUni.IsLinkLocalUnicast())
fmt.Println(ipv4LinkLocalMulti.IsLinkLocalUnicast())
Вывод:
true false true false
func (IP) IsLoopback
func (ip IP) IsLoopback() bool
IsLoopback сообщает, является ли ip адресом обратной петли.
Пример
Код:
ipv6Lo := net.ParseIP("::1")
ipv6 := net.ParseIP("ff02::1")
ipv4Lo := net.ParseIP("127.0.0.0")
ipv4 := net.ParseIP("128.0.0.0")
fmt.Println(ipv6Lo.IsLoopback())
fmt.Println(ipv6.IsLoopback())
fmt.Println(ipv4Lo.IsLoopback())
fmt.Println(ipv4.IsLoopback())
Вывод:
true false true false
func (IP) IsMulticast
func (ip IP) IsMulticast() bool
IsMulticast сообщает, является ли ip многоадресным адресом.
Пример
Код:
ipv6Multi := net.ParseIP("FF00::")
ipv6LinkLocalMulti := net.ParseIP("ff02::1")
ipv6Lo := net.ParseIP("::1")
ipv4Multi := net.ParseIP("239.0.0.0")
ipv4LinkLocalMulti := net.ParseIP("224.0.0.0")
ipv4Lo := net.ParseIP("127.0.0.0")
fmt.Println(ipv6Multi.IsMulticast())
fmt.Println(ipv6LinkLocalMulti.IsMulticast())
fmt.Println(ipv6Lo.IsMulticast())
fmt.Println(ipv4Multi.IsMulticast())
fmt.Println(ipv4LinkLocalMulti.IsMulticast())
fmt.Println(ipv4Lo.IsMulticast())
Вывод:
true true false true true false
func (IP) IsPrivate 1.17
func (ip IP) IsPrivate() bool
IsPrivate сообщает, является ли ip частным адресом согласно RFC 1918 (для IPv4-адресов) и RFC 4193 (для IPv6-адресов). Иными словами, метод сообщает, входит ли ip в диапазон 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 или fc00::/7.
IsPrivate не характеризует адреса с точки зрения безопасности и не должен использоваться для управления доступом.
Пример
Код:
ipv6Private := net.ParseIP("fc00::")
ipv6Public := net.ParseIP("fe00::")
ipv4Private := net.ParseIP("10.255.0.0")
ipv4Public := net.ParseIP("11.0.0.0")
fmt.Println(ipv6Private.IsPrivate())
fmt.Println(ipv6Public.IsPrivate())
fmt.Println(ipv4Private.IsPrivate())
fmt.Println(ipv4Public.IsPrivate())
Вывод:
true false true false
func (IP) IsUnspecified
func (ip IP) IsUnspecified() bool
IsUnspecified сообщает, является ли ip неуказанным адресом: IPv4-адресом "0.0.0.0" или IPv6-адресом "::".
Пример
Код:
ipv6Unspecified := net.ParseIP("::")
ipv6Specified := net.ParseIP("fe00::")
ipv4Unspecified := net.ParseIP("0.0.0.0")
ipv4Specified := net.ParseIP("8.8.8.8")
fmt.Println(ipv6Unspecified.IsUnspecified())
fmt.Println(ipv6Specified.IsUnspecified())
fmt.Println(ipv4Unspecified.IsUnspecified())
fmt.Println(ipv4Specified.IsUnspecified())
Вывод:
true false true false
func (IP) MarshalText 1.2
func (ip IP) MarshalText() ([]byte, error)
MarshalText реализует интерфейс encoding.TextMarshaler. Формат кодирования совпадает с форматом, возвращаемым IP.String, за одним исключением: если len(ip) равен нулю, метод возвращает пустой срез.
func (IP) Mask
func (ip IP) Mask(mask IPMask) IP
Mask возвращает результат применения маски mask к IP-адресу ip.
Пример
Код:
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))
Вывод:
192.0.2.0 2001:db8::
func (IP) String
func (ip IP) String() string
String возвращает строковое представление IP-адреса ip. Метод возвращает один из четырёх вариантов:
- "<nil>", если длина ip равна 0
- десятичная запись с точками ("192.0.2.1"), если ip — IPv4-адрес или IPv6-адрес, отображённый на IPv4
- IPv6-адрес в соответствии с RFC 5952 ("2001:db8::1"), если ip является допустимым IPv6-адресом
- шестнадцатеричное представление ip без знаков пунктуации, если не подходит ни один из других вариантов
Пример
Код:
ipv6 := net.IP{0xfc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
ipv4 := net.IPv4(10, 255, 0, 0)
fmt.Println(ipv6.String())
fmt.Println(ipv4.String())
Вывод:
fc00:: 10.255.0.0
func (IP) To16
func (ip IP) To16() IP
To16 преобразует IP-адрес ip в 16-байтовое представление. Если ip не является IP-адресом (имеет неверную длину), To16 возвращает nil.
Пример
Код:
ipv6 := net.IP{0xfc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
ipv4 := net.IPv4(10, 255, 0, 0)
fmt.Println(ipv6.To16())
fmt.Println(ipv4.To16())
Вывод:
fc00:: 10.255.0.0
func (IP) To4
func (ip IP) To4() IP
To4 преобразует IPv4-адрес ip в 4-байтовое представление. Если ip не является IPv4-адресом, To4 возвращает nil.
Пример
Код:
ipv6 := net.IP{0xfc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
ipv4 := net.IPv4(10, 255, 0, 0)
fmt.Println(ipv6.To4())
fmt.Println(ipv4.To4())
Вывод:
<nil> 10.255.0.0
func (*IP) UnmarshalText 1.2
func (ip *IP) UnmarshalText(text []byte) error
UnmarshalText реализует интерфейс encoding.TextUnmarshaler. IP-адрес должен быть представлен в формате, принимаемом функцией ParseIP.
type IPAddr
IPAddr представляет адрес конечной точки IP.
type IPAddr struct {
IP IP
Zone string // IPv6 scoped addressing zone; added in Go 1.1
}
func ResolveIPAddr
func ResolveIPAddr(network, address string) (*IPAddr, error)
ResolveIPAddr возвращает адрес конечной точки IP.
Сеть должна быть именем IP-сети.
Если хост в параметре address не является IP-адресом в буквальной записи, ResolveIPAddr разрешает адрес в адрес конечной точки IP. В противном случае метод разбирает адрес как IP-адрес в буквальной записи. В параметре address можно указать имя хоста, но это не рекомендуется, поскольку будет возвращен не более чем один IP-адрес этого имени хоста.
Описание параметров network и address см. в функции Dial.
func (*IPAddr) Network
func (a *IPAddr) Network() string
Network возвращает имя сети адреса — "ip".
func (*IPAddr) String
func (a *IPAddr) String() string
type IPConn
IPConn реализует интерфейсы Conn и PacketConn для сетевых подключений IP.
type IPConn struct {
// contains filtered or unexported fields
}
func DialIP
func DialIP(network string, laddr, raddr *IPAddr) (*IPConn, error)
DialIP работает аналогично Dial для IP-сетей.
Сеть должна быть именем IP-сети; подробности см. в описании функции Dial.
Если laddr равен nil, локальный адрес выбирается автоматически. Если поле IP в raddr равно nil или содержит неуказанный IP-адрес, предполагается локальная система.
func ListenIP
func ListenIP(network string, laddr *IPAddr) (*IPConn, error)
ListenIP работает аналогично ListenPacket для IP-сетей.
Сеть должна быть именем IP-сети; подробности см. в описании функции Dial.
Если поле IP в laddr равно nil или содержит неуказанный IP-адрес, ListenIP принимает соединения на всех доступных IP-адресах локальной системы, кроме многоадресных IP-адресов.
func (*IPConn) Close
func (c *IPConn) Close() error
Close закрывает соединение.
func (*IPConn) File
func (c *IPConn) File() (f *os.File, err error)
File возвращает копию базового os.File. Вызывающий код должен закрыть f после использования. Закрытие c не влияет на f, а закрытие f не влияет на c.
Дескриптор файла возвращенного os.File отличается от дескриптора соединения. Изменение свойств исходного файла с помощью этого дубликата может дать ожидаемый результат, а может и не дать.
В Windows дескриптор файла возвращённого os.File нельзя использовать в других процессах.
func (*IPConn) LocalAddr
func (c *IPConn) LocalAddr() Addr
LocalAddr возвращает локальный сетевой адрес. Возвращаемый Addr является общим для всех вызовов LocalAddr, поэтому не изменяйте его.
func (*IPConn) Read
func (c *IPConn) Read(b []byte) (int, error)
Read реализует метод Conn Read.
func (*IPConn) ReadFrom
func (c *IPConn) ReadFrom(b []byte) (int, Addr, error)
ReadFrom реализует метод PacketConn ReadFrom.
func (*IPConn) ReadFromIP
func (c *IPConn) ReadFromIP(b []byte) (int, *IPAddr, error)
ReadFromIP действует как ReadFrom, но возвращает IPAddr.
func (*IPConn) ReadMsgIP 1.1
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 можно использовать для управления параметрами сокета на уровне IP в oob.
func (*IPConn) RemoteAddr
func (c *IPConn) RemoteAddr() Addr
RemoteAddr возвращает удалённый сетевой адрес. Возвращаемый Addr является общим для всех вызовов RemoteAddr, поэтому не изменяйте его.
func (*IPConn) SetDeadline
func (c *IPConn) SetDeadline(t time.Time) error
SetDeadline реализует метод Conn SetDeadline.
func (*IPConn) SetReadBuffer
func (c *IPConn) SetReadBuffer(bytes int) error
SetReadBuffer задаёт размер буфера приёма операционной системы, связанного с соединением.
func (*IPConn) SetReadDeadline
func (c *IPConn) SetReadDeadline(t time.Time) error
SetReadDeadline реализует метод Conn SetReadDeadline.
func (*IPConn) SetWriteBuffer
func (c *IPConn) SetWriteBuffer(bytes int) error
SetWriteBuffer задаёт размер буфера передачи операционной системы, связанного с соединением.
func (*IPConn) SetWriteDeadline
func (c *IPConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline реализует метод Conn SetWriteDeadline.
func (*IPConn) SyscallConn 1.9
func (c *IPConn) SyscallConn() (syscall.RawConn, error)
SyscallConn возвращает необработанное сетевое соединение. Этот метод реализует интерфейс syscall.Conn.
func (*IPConn) Write
func (c *IPConn) Write(b []byte) (int, error)
Write реализует метод Conn Write.
func (*IPConn) WriteMsgIP 1.1
func (c *IPConn) WriteMsgIP(b, oob []byte, addr *IPAddr) (n, oobn int, err error)
WriteMsgIP записывает сообщение по адресу addr через c, копируя полезную нагрузку из b, а связанные внеполосные данные — из oob. Метод возвращает количество записанных байтов полезной нагрузки и внеполосных данных.
Пакеты golang.org/x/net/ipv4 и golang.org/x/net/ipv6 можно использовать для управления параметрами сокета на уровне IP в oob.
func (*IPConn) WriteTo
func (c *IPConn) WriteTo(b []byte, addr Addr) (int, error)
WriteTo реализует метод PacketConn WriteTo.
func (*IPConn) WriteToIP
func (c *IPConn) WriteToIP(b []byte, addr *IPAddr) (int, error)
WriteToIP действует как IPConn.WriteTo, но принимает IPAddr.
type IPMask
IPMask — это битовая маска, которую можно использовать для обработки IP-адресов при адресации и маршрутизации IP.
Подробности см. в описании типа IPNet и функции ParseCIDR.
type IPMask []byte
func CIDRMask
func CIDRMask(ones, bits int) IPMask
CIDRMask возвращает IPMask, состоящую из «единичных» битов 1, за которыми следуют нули до общей длины в 'bits' бит. Для маски такого вида CIDRMask является обратной функцией к IPMask.Size.
Пример
Код:
// 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))
Вывод:
fffffffe ffffffffffffffff0000000000000000
func IPv4Mask
func IPv4Mask(a, b, c, d byte) IPMask
IPv4Mask возвращает IP-маску (в 4-байтовом формате) для IPv4-маски a.b.c.d.
Пример
Код:
fmt.Println(net.IPv4Mask(255, 255, 255, 0))
Вывод:
ffffff00
func (IPMask) Size
func (m IPMask) Size() (ones, bits int)
Size возвращает количество ведущих единиц и общее количество битов в маске. Если маска не имеет канонической формы — единицы, за которыми следуют нули, — Size возвращает 0, 0.
func (IPMask) String
func (m IPMask) String() string
String возвращает шестнадцатеричное представление m без знаков препинания.
type IPNet
IPNet представляет IP-сеть.
type IPNet struct {
IP IP // network number
Mask IPMask // network mask
}
func (*IPNet) Contains
func (n *IPNet) Contains(ip IP) bool
Contains сообщает, входит ли ip в сеть.
func (*IPNet) Network
func (n *IPNet) Network() string
Network возвращает имя сети адреса — "ip+net".
func (*IPNet) String
func (n *IPNet) String() string
String возвращает представление n в нотации CIDR, например "192.0.2.0/24" или "2001:db8::/48", как определено в RFC 4632 и RFC 4291. Если маска не имеет канонической формы, возвращается строка, состоящая из IP-адреса, за которым следует косая черта и маска в шестнадцатеричном формате без знаков препинания, например "198.51.100.0/c000ff00".
type Interface
Interface представляет соответствие между именем сетевого интерфейса и его индексом. Он также содержит сведения о сетевых интерфейсах.
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"; may be the empty string
HardwareAddr HardwareAddr // IEEE MAC-48, EUI-48 and EUI-64 form
Flags Flags // e.g., FlagUp, FlagLoopback, FlagMulticast
}
func InterfaceByIndex
func InterfaceByIndex(index int) (*Interface, error)
InterfaceByIndex возвращает интерфейс, указанный индексом.
В Solaris функция возвращает один из логических сетевых интерфейсов, совместно использующих логический канал передачи данных; для большей точности используйте InterfaceByName.
func InterfaceByName
func InterfaceByName(name string) (*Interface, error)
InterfaceByName возвращает интерфейс, указанный именем.
func Interfaces
func Interfaces() ([]Interface, error)
Interfaces возвращает список сетевых интерфейсов системы.
func (*Interface) Addrs
func (ifi *Interface) Addrs() ([]Addr, error)
Addrs возвращает список одноадресных адресов указанного интерфейса.
func (*Interface) MulticastAddrs
func (ifi *Interface) MulticastAddrs() ([]Addr, error)
MulticastAddrs возвращает список адресов групп многоадресной рассылки, к которым присоединился указанный интерфейс.
type InvalidAddrError
type InvalidAddrError string
func (InvalidAddrError) Error
func (e InvalidAddrError) Error() string
func (InvalidAddrError) Temporary
func (e InvalidAddrError) Temporary() bool
func (InvalidAddrError) Timeout
func (e InvalidAddrError) Timeout() bool
type KeepAliveConfig 1.23
KeepAliveConfig содержит параметры TCP keep-alive.
Если поля Idle, Interval или Count равны нулю, выбирается значение по умолчанию. Если поле отрицательное, соответствующий параметр уровня сокета останется без изменений.
Обратите внимание, что до Windows 10 версии 1709 не поддерживалась ни отдельная настройка Idle и Interval, ни изменение Count (обычно равного 10). Поэтому в старых версиях Windows рекомендуется задавать для Idle и Interval неотрицательные значения, а для Count — -1, если вы хотите настроить параметры TCP keep-alive. В отличие от этого, если неотрицательное значение задано только для одного из полей Idle и Interval, для другого будет установлено системное значение по умолчанию. Наконец, задайте для обоих полей Idle и Interval отрицательные значения, если хотите оставить их без изменений.
Обратите внимание, что Solaris и его производные системы не поддерживают установку неотрицательного значения для Interval и отрицательного значения для Count, а также наоборот.
type KeepAliveConfig struct {
// If Enable is true, keep-alive probes are enabled.
Enable bool
// Idle is the time that the connection must be idle before
// the first keep-alive probe is sent.
// If zero, a default value of 15 seconds is used.
Idle time.Duration
// Interval is the time between keep-alive probes.
// If zero, a default value of 15 seconds is used.
Interval time.Duration
// Count is the maximum number of keep-alive probes that
// can go unanswered before dropping a connection.
// If zero, a default value of 9 is used.
Count int
}
type ListenConfig 1.11
ListenConfig содержит параметры для прослушивания адреса.
type ListenConfig struct {
// If Control is not nil, it is called after creating the network
// connection but before binding it to the operating system.
//
// Network and address parameters passed to Control function are not
// necessarily the ones passed to Listen. Calling Listen with TCP networks
// will cause the Control function to be called with "tcp4" or "tcp6",
// UDP networks become "udp4" or "udp6", IP networks become "ip4" or "ip6",
// and other known networks are passed as-is.
Control func(network, address string, c syscall.RawConn) error
// KeepAlive specifies the keep-alive period for network
// connections accepted by this listener.
//
// KeepAlive is ignored if KeepAliveConfig.Enable is true.
//
// If zero, keep-alive are enabled if supported by the protocol
// and operating system. Network protocols or operating systems
// that do not support keep-alive ignore this field.
// If negative, keep-alive are disabled.
KeepAlive time.Duration // Go 1.13
// KeepAliveConfig specifies the keep-alive probe configuration
// for an active network connection, when supported by the
// protocol and operating system.
//
// If KeepAliveConfig.Enable is true, keep-alive probes are enabled.
// If KeepAliveConfig.Enable is false and KeepAlive is negative,
// keep-alive probes are disabled.
KeepAliveConfig KeepAliveConfig // Go 1.23
// contains filtered or unexported fields
}
func (*ListenConfig) Listen 1.11
func (lc *ListenConfig) Listen(ctx context.Context, network, address string) (Listener, error)
Listen начинает прослушивание локального сетевого адреса.
Описание параметров network и address см. в функции Listen.
Аргумент ctx используется при разрешении адреса, на котором нужно прослушивать; он не влияет на возвращаемый Listener.
func (*ListenConfig) ListenPacket 1.11
func (lc *ListenConfig) ListenPacket(ctx context.Context, network, address string) (PacketConn, error)
ListenPacket начинает прослушивание локального сетевого адреса.
Описание параметров network и address см. в функции ListenPacket.
Аргумент ctx используется при разрешении адреса, на котором нужно прослушивать; он не влияет на возвращаемый PacketConn.
func (*ListenConfig) MultipathTCP 1.21
func (lc *ListenConfig) MultipathTCP() bool
MultipathTCP сообщает, будет ли использоваться MPTCP.
Этот метод не проверяет, поддерживается ли MPTCP операционной системой.
func (*ListenConfig) SetMultipathTCP 1.21
func (lc *ListenConfig) SetMultipathTCP(use bool)
SetMultipathTCP указывает методу Listen использовать или не использовать MPTCP, если оно поддерживается операционной системой. Этот метод переопределяет системные настройки по умолчанию и параметр GODEBUG=multipathtcp=..., если он задан.
Если MPTCP недоступен на хосте или не поддерживается клиентом, метод Listen переключится на TCP.
type Listener
Listener — это универсальный сетевой слушатель для протоколов, ориентированных на потоки.
Несколько горутин могут одновременно вызывать методы 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
} Пример
Код:
// 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
func FileListener(f *os.File) (ln Listener, err error)
FileListener возвращает копию сетевого слушателя, соответствующего открытому файлу f. Вызывающий код должен закрыть ln после завершения работы. Закрытие ln не влияет на f, а закрытие f не влияет на ln.
func Listen
func Listen(network, address string) (Listener, error)
Listen начинает прослушивание локального сетевого адреса.
Значением network должно быть "tcp", "tcp4", "tcp6", "unix" или "unixpacket".
Для сетей TCP, если хост в параметре address пуст или представляет собой неопределённый IP-адрес, Listen прослушивает все доступные одноадресные и любые многоадресные IP-адреса локальной системы. Чтобы использовать только IPv4, укажите сеть "tcp4". В адресе можно использовать имя хоста, но это не рекомендуется, поскольку слушатель будет создан не более чем для одного IP-адреса хоста. Если порт в параметре address пуст или равен "0", как в "127.0.0.1:" или "[::1]:0", номер порта выбирается автоматически. Метод Addr интерфейса Listener позволяет узнать выбранный порт.
Описание параметров network и address см. в функции Dial.
Внутри Listen использует context.Background; чтобы указать контекст, используйте ListenConfig.Listen.
type MX
MX представляет одну запись DNS MX.
type MX struct {
Host string
Pref uint16
}
func LookupMX
func LookupMX(name string) ([]*MX, error)
LookupMX возвращает записи DNS MX для указанного доменного имени, отсортированные по предпочтительности.
Возвращаемые имена почтовых серверов проверяются на соответствие правильному представлению доменных имён или числовых IP-адресов. Если ответ содержит некорректные имена, соответствующие записи отфильтровываются, а вместе с оставшимися результатами, если они есть, возвращается ошибка.
Внутри LookupMX использует context.Background; чтобы указать контекст, используйте Resolver.LookupMX.
type NS 1.1
NS представляет одну запись DNS NS.
type NS struct {
Host string
}
func LookupNS 1.1
func LookupNS(name string) ([]*NS, error)
LookupNS возвращает записи DNS NS для указанного доменного имени.
Возвращаемые имена серверов имён проверяются на соответствие правильному представлению доменных имён. Если ответ содержит некорректные имена, соответствующие записи отфильтровываются, а вместе с оставшимися результатами, если они есть, возвращается ошибка.
Внутри LookupNS использует context.Background; чтобы указать контекст, используйте Resolver.LookupNS.
type OpError
OpError — это тип ошибки, обычно возвращаемый функциями пакета net. Он описывает операцию, тип сети и адрес, связанные с ошибкой.
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 // Go 1.5
// 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.
// The Error method panics if the error is nil.
Err error
}
func (*OpError) Error
func (e *OpError) Error() string
func (*OpError) Temporary
func (e *OpError) Temporary() bool
func (*OpError) Timeout
func (e *OpError) Timeout() bool
func (*OpError) Unwrap 1.13
func (e *OpError) Unwrap() error
type PacketConn
PacketConn — это универсальное сетевое соединение, ориентированное на пакеты.
Несколько горутин могут одновременно вызывать методы PacketConn.
type PacketConn interface {
// ReadFrom reads a packet from the connection,
// copying the payload into p. It returns the number of
// bytes copied into p and the return address that
// was on the packet.
// It returns the number of bytes read (0 <= n <= len(p))
// and any error encountered. Callers should always process
// the n > 0 bytes returned before considering the error err.
// ReadFrom can be made to time out and return an error after a
// fixed time limit; see SetDeadline and SetReadDeadline.
ReadFrom(p []byte) (n int, addr Addr, err error)
// WriteTo writes a packet with payload p to addr.
// WriteTo can be made to time out and return an Error after a
// fixed time limit; see SetDeadline and SetWriteDeadline.
// On packet-oriented connections, write timeouts are rare.
WriteTo(p []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, if known.
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 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.
//
// If the deadline is exceeded a call to Read or Write or to other
// I/O methods will return an error that wraps os.ErrDeadlineExceeded.
// This can be tested using errors.Is(err, os.ErrDeadlineExceeded).
// The error's Timeout method will return true, but note that there
// are other possible errors for which the Timeout method will
// return true even if the deadline has not been exceeded.
//
// 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
func FilePacketConn(f *os.File) (c PacketConn, err error)
FilePacketConn возвращает копию пакетного сетевого соединения, соответствующего открытому файлу f. Вызывающий код должен закрыть f после завершения работы. Закрытие c не влияет на f, а закрытие f не влияет на c.
func ListenPacket
func ListenPacket(network, address string) (PacketConn, error)
ListenPacket начинает прослушивание локального сетевого адреса.
Значением network должно быть "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", номер порта выбирается автоматически. Чтобы узнать выбранный порт, можно использовать метод LocalAddr у PacketConn.
Описание параметров сети и адреса см. в документации функции Dial.
Внутри ListenPacket использует context.Background; чтобы указать контекст, используйте ListenConfig.ListenPacket.
type ParseError
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 (*ParseError) Error
func (e *ParseError) Error() string
func (*ParseError) Temporary 1.17
func (e *ParseError) Temporary() bool
func (*ParseError) Timeout 1.17
func (e *ParseError) Timeout() bool
type Resolver 1.8
Resolver выполняет поиск имён и номеров.
nil-указатель *Resolver эквивалентен нулевому значению 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 // Go 1.9
// 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) // Go 1.9
// contains filtered or unexported fields
}
func (*Resolver) LookupAddr 1.8
func (r *Resolver) LookupAddr(ctx context.Context, addr string) ([]string, error)
LookupAddr выполняет обратный поиск для указанного адреса и возвращает список имён, сопоставленных с этим адресом.
Возвращённые имена проверяются на соответствие правильному формату доменных имён в формате представления. Если ответ содержит некорректные имена, соответствующие записи отфильтровываются, а вместе с оставшимися результатами, если они есть, возвращается ошибка.
func (*Resolver) LookupCNAME 1.8
func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error)
LookupCNAME возвращает каноническое имя указанного узла. Если вызывающей стороне не нужно каноническое имя, можно напрямую вызвать LookupHost или LookupIP; обе функции разрешают каноническое имя в процессе поиска.
Каноническое имя — это конечное имя после перехода по нулю или нескольким записям CNAME. LookupCNAME не возвращает ошибку, если узел не содержит DNS-записей "CNAME", при условии что для узла разрешаются записи адресов.
Возвращённое каноническое имя проверяется на соответствие правильному формату доменного имени в формате представления.
func (*Resolver) LookupHost 1.8
func (r *Resolver) LookupHost(ctx context.Context, host string) (addrs []string, err error)
LookupHost ищет указанный узел с помощью локального резолвера. Функция возвращает срез адресов этого узла.
func (*Resolver) LookupIP 1.15
func (r *Resolver) LookupIP(ctx context.Context, network, host string) ([]IP, error)
LookupIP ищет IP-адреса узла для указанной сети с помощью локального резолвера. Функция возвращает срез IP-адресов этого узла указанного типом сети. Значение network должно быть одним из следующих: "ip", "ip4" или "ip6".
func (*Resolver) LookupIPAddr 1.8
func (r *Resolver) LookupIPAddr(ctx context.Context, host string) ([]IPAddr, error)
LookupIPAddr ищет узел с помощью локального резолвера. Функция возвращает срез адресов IPv4 и IPv6 этого узла.
func (*Resolver) LookupMX 1.8
func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error)
LookupMX возвращает DNS-записи MX для указанного доменного имени, отсортированные по предпочтительности.
Возвращённые имена почтовых серверов проверяются на соответствие правильному формату доменных имён в формате представления или числовым IP-адресам. Если ответ содержит некорректные имена, соответствующие записи отфильтровываются, а вместе с оставшимися результатами, если они есть, возвращается ошибка.
func (*Resolver) LookupNS 1.8
func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error)
LookupNS возвращает DNS-записи NS для указанного доменного имени.
Возвращённые имена серверов имён проверяются на соответствие правильному формату доменных имён в формате представления. Если ответ содержит некорректные имена, соответствующие записи отфильтровываются, а вместе с оставшимися результатами, если они есть, возвращается ошибка.
func (*Resolver) LookupNetIP 1.18
func (r *Resolver) LookupNetIP(ctx context.Context, network, host string) ([]netip.Addr, error)
LookupNetIP ищет узел с помощью локального резолвера. Функция возвращает срез IP-адресов этого узла указанного типом сети. Значение network должно быть одним из следующих: "ip", "ip4" или "ip6".
func (*Resolver) LookupPort 1.8
func (r *Resolver) LookupPort(ctx context.Context, network, service string) (port int, err error)
LookupPort ищет порт для указанной сети и службы.
Значение network должно быть одним из следующих: "tcp", "tcp4", "tcp6", "udp", "udp4", "udp6" или "ip".
func (*Resolver) LookupSRV 1.8
func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error)
LookupSRV пытается выполнить запрос SRV для указанной службы, протокола и доменного имени. Значение proto — "tcp" или "udp". Возвращённые записи сортируются по приоритету, а внутри одного приоритета упорядочиваются случайным образом с учётом веса.
LookupSRV формирует DNS-имя для поиска в соответствии с RFC 2782. То есть выполняет поиск имени _service._proto.name. Для поддержки служб, публикующих записи SRV под нестандартными именами, если service и proto — пустые строки, LookupSRV выполняет поиск непосредственно по name.
Возвращённое cname — это имя владельца из первой записи ответа SRV. Обычно это сформированное DNS-имя (_service._proto.name), но оно может отличаться, если записи CNAME перенаправляют запрос на другое имя.
Возвращённые имена служб проверяются на соответствие правильному формату доменных имён в формате представления. Если ответ содержит некорректные имена, соответствующие записи отфильтровываются, а вместе с оставшимися результатами, если они есть, возвращается ошибка.
func (*Resolver) LookupTXT 1.8
func (r *Resolver) LookupTXT(ctx context.Context, name string) ([]string, error)
LookupTXT возвращает DNS-записи TXT для указанного доменного имени.
Если DNS-запись TXT содержит несколько строк, они объединяются в одну строку.
type SRV
SRV представляет одну DNS-запись SRV.
type SRV struct {
Target string
Port uint16
Priority uint16
Weight uint16
}
func LookupSRV
func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error)
LookupSRV пытается выполнить запрос SRV для указанной службы, протокола и доменного имени. Значение proto — "tcp" или "udp". Возвращённые записи сортируются по приоритету, а внутри одного приоритета упорядочиваются случайным образом с учётом веса.
LookupSRV формирует DNS-имя для поиска в соответствии с RFC 2782. То есть выполняет поиск имени _service._proto.name. Для поддержки служб, публикующих записи SRV под нестандартными именами, если service и proto — пустые строки, LookupSRV выполняет поиск непосредственно по name.
Возвращённое cname — это имя владельца из первой записи ответа SRV. Обычно это сформированное DNS-имя (_service._proto.name), но оно может отличаться, если записи CNAME перенаправляют запрос на другое имя.
Возвращённые имена служб проверяются на соответствие правильному формату доменных имён в формате представления. Если ответ содержит некорректные имена, соответствующие записи отфильтровываются, а вместе с оставшимися результатами, если они есть, возвращается ошибка.
type TCPAddr
TCPAddr представляет адрес конечной точки TCP.
type TCPAddr struct {
IP IP
Port int
Zone string // IPv6 scoped addressing zone; added in Go 1.1
}
func ResolveTCPAddr
func ResolveTCPAddr(network, address string) (*TCPAddr, error)
ResolveTCPAddr возвращает адрес конечной точки TCP.
В качестве имени сети должно быть указано имя сети TCP.
Если узел в параметре адреса не является IP-адресом в буквальной записи или порт не является номером порта в буквальной записи, ResolveTCPAddr преобразует адрес в адрес конечной точки TCP. В противном случае функция разбирает адрес как пару из IP-адреса и номера порта в буквальной записи. В параметре адреса можно указать имя узла, но это не рекомендуется, поскольку будет возвращен не более чем один IP-адрес этого узла.
Описание параметров сети и адреса см. в функции Dial.
func TCPAddrFromAddrPort 1.18
func TCPAddrFromAddrPort(addr netip.AddrPort) *TCPAddr
TCPAddrFromAddrPort возвращает addr как TCPAddr. Если addr.IsValid() возвращает false, то возвращенный TCPAddr будет содержать поле IP со значением nil, указывая на неопределенный адрес, не привязанный к семейству адресов.
func (*TCPAddr) AddrPort 1.18
func (a *TCPAddr) AddrPort() netip.AddrPort
AddrPort возвращает TCPAddr a в виде netip.AddrPort.
Если значение a.Port не помещается в uint16, оно молча усекается.
Если a равно nil, возвращается нулевое значение.
func (*TCPAddr) Network
func (a *TCPAddr) Network() string
Network возвращает имя сети адреса — "tcp".
func (*TCPAddr) String
func (a *TCPAddr) String() string
type TCPConn
TCPConn — это реализация интерфейса Conn для сетевых TCP-соединений.
type TCPConn struct {
// contains filtered or unexported fields
}
func DialTCP
func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error)
DialTCP работает так же, как Dial, для сетей TCP.
В качестве имени сети должно быть указано имя сети TCP; подробности см. в описании функции Dial.
Если laddr равно nil, локальный адрес выбирается автоматически. Если поле IP у raddr равно nil или содержит неопределенный IP-адрес, используется локальная система.
func (*TCPConn) Close
func (c *TCPConn) Close() error
Close закрывает соединение.
func (*TCPConn) CloseRead
func (c *TCPConn) CloseRead() error
CloseRead отключает чтение в TCP-соединении. Большинству вызывающих кода достаточно использовать Close.
func (*TCPConn) CloseWrite
func (c *TCPConn) CloseWrite() error
CloseWrite отключает запись в TCP-соединении. Большинству вызывающих кода достаточно использовать Close.
func (*TCPConn) File
func (c *TCPConn) File() (f *os.File, err error)
File возвращает копию базового os.File. Вызывающий код отвечает за закрытие f после завершения работы. Закрытие c не влияет на f, а закрытие f не влияет на c.
Дескриптор файла у возвращенного os.File отличается от дескриптора соединения. Попытка изменить свойства исходного объекта с помощью этого дубликата может как привести, так и не привести к желаемому результату.
В Windows дескриптор файла у возвращенного os.File нельзя использовать в других процессах.
func (*TCPConn) LocalAddr
func (c *TCPConn) LocalAddr() Addr
LocalAddr возвращает локальный сетевой адрес. Возвращаемый Addr является общим для всех вызовов LocalAddr, поэтому не изменяйте его.
func (*TCPConn) MultipathTCP 1.21
func (c *TCPConn) MultipathTCP() (bool, error)
MultipathTCP сообщает, используется ли в текущем соединении MPTCP.
Если Multipath TCP не поддерживается узлом или другой стороной либо намеренно или случайно блокируется промежуточным устройством, будет выполнен переход на TCP. Этот метод по возможности проверяет, продолжает ли использоваться MPTCP.
В Linux при использовании ядер версии >= v5.16 проверяется больше условий, что повышает точность результатов.
func (*TCPConn) Read
func (c *TCPConn) Read(b []byte) (int, error)
Read реализует метод Read интерфейса Conn.
func (*TCPConn) ReadFrom
func (c *TCPConn) ReadFrom(r io.Reader) (int64, error)
ReadFrom реализует метод ReadFrom интерфейса io.ReaderFrom.
func (*TCPConn) RemoteAddr
func (c *TCPConn) RemoteAddr() Addr
RemoteAddr возвращает удаленный сетевой адрес. Возвращаемый Addr является общим для всех вызовов RemoteAddr, поэтому не изменяйте его.
func (*TCPConn) SetDeadline
func (c *TCPConn) SetDeadline(t time.Time) error
SetDeadline реализует метод SetDeadline интерфейса Conn.
func (*TCPConn) SetKeepAlive
func (c *TCPConn) SetKeepAlive(keepalive bool) error
SetKeepAlive задает, должна ли операционная система отправлять через соединение сообщения keep-alive.
func (*TCPConn) SetKeepAliveConfig 1.23
func (c *TCPConn) SetKeepAliveConfig(config KeepAliveConfig) error
SetKeepAliveConfig настраивает сообщения keep-alive, отправляемые операционной системой.
func (*TCPConn) SetKeepAlivePeriod 1.2
func (c *TCPConn) SetKeepAlivePeriod(d time.Duration) error
SetKeepAlivePeriod задает время простоя соединения, после которого TCP начинает отправлять пробы keepalive.
Обратите внимание: вызов этого метода в Windows до Windows 10 версии 1709 сбрасывает KeepAliveInterval до системного значения по умолчанию, обычно равного 1 секунде.
func (*TCPConn) SetLinger
func (c *TCPConn) SetLinger(sec int) error
SetLinger задает поведение Close для соединения, в котором еще есть данные, ожидающие отправки или подтверждения.
Если sec < 0 (значение по умолчанию), операционная система завершает отправку данных в фоновом режиме.
Если sec == 0, операционная система отбрасывает все неотправленные или неподтвержденные данные.
Если sec > 0, данные отправляются в фоновом режиме, как и при sec < 0. В некоторых операционных системах, включая Linux, это может привести к блокировке Close до тех пор, пока все данные не будут отправлены или отброшены. В некоторых операционных системах по истечении sec секунд оставшиеся неотправленные данные могут быть отброшены.
func (*TCPConn) SetNoDelay
func (c *TCPConn) SetNoDelay(noDelay bool) error
SetNoDelay управляет тем, должна ли операционная система задерживать передачу пакетов в надежде отправить меньшее их количество (алгоритм Нейгла). По умолчанию установлено значение true (без задержки): это означает, что данные отправляются сразу после вызова Write.
func (*TCPConn) SetReadBuffer
func (c *TCPConn) SetReadBuffer(bytes int) error
SetReadBuffer задает размер буфера приема операционной системы, связанного с соединением.
func (*TCPConn) SetReadDeadline
func (c *TCPConn) SetReadDeadline(t time.Time) error
SetReadDeadline реализует метод SetReadDeadline интерфейса Conn.
func (*TCPConn) SetWriteBuffer
func (c *TCPConn) SetWriteBuffer(bytes int) error
SetWriteBuffer задает размер буфера передачи операционной системы, связанного с соединением.
func (*TCPConn) SetWriteDeadline
func (c *TCPConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline реализует метод SetWriteDeadline интерфейса Conn.
func (*TCPConn) SyscallConn 1.9
func (c *TCPConn) SyscallConn() (syscall.RawConn, error)
SyscallConn возвращает необработанное сетевое соединение. Оно реализует интерфейс syscall.Conn.
func (*TCPConn) Write
func (c *TCPConn) Write(b []byte) (int, error)
Write реализует метод Write интерфейса Conn.
func (*TCPConn) WriteTo 1.22
func (c *TCPConn) WriteTo(w io.Writer) (int64, error)
WriteTo реализует метод WriteTo интерфейса io.WriterTo.
type TCPListener
TCPListener — это сетевой прослушиватель TCP. Обычно клиентам следует использовать переменные типа Listener, а не предполагать, что используется TCP.
type TCPListener struct {
// contains filtered or unexported fields
}
func ListenTCP
func ListenTCP(network string, laddr *TCPAddr) (*TCPListener, error)
ListenTCP действует как Listen для сетей TCP.
Сеть должна иметь имя сети TCP; подробности см. в описании func Dial.
Если поле IP в laddr равно nil или содержит неопределённый IP-адрес, ListenTCP прослушивает все доступные одноадресные и любые адреса IP локальной системы. Если поле Port в laddr равно 0, номер порта выбирается автоматически.
func (*TCPListener) Accept
func (l *TCPListener) Accept() (Conn, error)
Accept реализует метод Accept интерфейса Listener; он ожидает следующего вызова и возвращает обобщённый Conn.
func (*TCPListener) AcceptTCP
func (l *TCPListener) AcceptTCP() (*TCPConn, error)
AcceptTCP принимает следующий входящий вызов и возвращает новое соединение.
func (*TCPListener) Addr
func (l *TCPListener) Addr() Addr
Addr возвращает сетевой адрес прослушивателя типа *TCPAddr. Возвращаемый Addr общий для всех вызовов Addr, поэтому не изменяйте его.
func (*TCPListener) Close
func (l *TCPListener) Close() error
Close прекращает прослушивание TCP-адреса. Уже принятые соединения не закрываются.
func (*TCPListener) File
func (l *TCPListener) File() (f *os.File, err error)
File возвращает копию базового os.File. Вызывающий код отвечает за закрытие f по завершении работы. Закрытие l не влияет на f, а закрытие f не влияет на l.
Дескриптор файла возвращённого os.File отличается от дескриптора соединения. Попытка изменить свойства исходного объекта с помощью этой копии может как привести, так и не привести к желаемому результату.
В Windows дескриптор файла возвращённого os.File нельзя использовать в других процессах.
func (*TCPListener) SetDeadline
func (l *TCPListener) SetDeadline(t time.Time) error
SetDeadline задаёт срок ожидания, связанный с прослушивателем. Нулевое значение времени отключает срок ожидания.
func (*TCPListener) SyscallConn 1.10
func (l *TCPListener) SyscallConn() (syscall.RawConn, error)
SyscallConn возвращает необработанное сетевое соединение. Оно реализует интерфейс syscall.Conn.
Возвращённый RawConn поддерживает только вызов Control. Read и Write возвращают ошибку.
type UDPAddr
UDPAddr представляет адрес конечной точки UDP.
type UDPAddr struct {
IP IP
Port int
Zone string // IPv6 scoped addressing zone; added in Go 1.1
}
func ResolveUDPAddr
func ResolveUDPAddr(network, address string) (*UDPAddr, error)
ResolveUDPAddr возвращает адрес конечной точки UDP.
Сеть должна иметь имя сети UDP.
Если хост в параметре address не является буквальным IP-адресом или порт не является буквальным номером порта, ResolveUDPAddr разрешает адрес в адрес конечной точки UDP. В противном случае он разбирает адрес как пару из буквального IP-адреса и номера порта. В параметре address можно указать имя хоста, но делать это не рекомендуется, поскольку будет возвращен не более чем один из IP-адресов этого имени.
Описание параметров network и address см. в func Dial.
func UDPAddrFromAddrPort 1.18
func UDPAddrFromAddrPort(addr netip.AddrPort) *UDPAddr
UDPAddrFromAddrPort возвращает addr как UDPAddr. Если addr.IsValid() возвращает false, в поле IP возвращённого UDPAddr будет nil, что обозначает неопределённый адрес, не привязанный к семейству адресов.
func (*UDPAddr) AddrPort 1.18
func (a *UDPAddr) AddrPort() netip.AddrPort
AddrPort возвращает UDPAddr a в виде netip.AddrPort.
Если значение a.Port не помещается в uint16, оно молча усекается.
Если a равно nil, возвращается нулевое значение.
func (*UDPAddr) Network
func (a *UDPAddr) Network() string
Network возвращает имя сети адреса — "udp".
func (*UDPAddr) String
func (a *UDPAddr) String() string
type UDPConn
UDPConn реализует интерфейсы Conn и PacketConn для сетевых соединений UDP.
type UDPConn struct {
// contains filtered or unexported fields
}
func DialUDP
func DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error)
DialUDP действует как Dial для сетей UDP.
Сеть должна иметь имя сети UDP; подробности см. в описании func Dial.
Если laddr равно nil, локальный адрес выбирается автоматически. Если поле IP в raddr равно nil или содержит неопределённый IP-адрес, предполагается локальная система.
func ListenMulticastUDP
func ListenMulticastUDP(network string, ifi *Interface, gaddr *UDPAddr) (*UDPConn, error)
ListenMulticastUDP действует как ListenPacket для сетей UDP, но принимает адрес группы на определённом сетевом интерфейсе.
Сеть должна иметь имя сети UDP; подробности см. в описании func Dial.
ListenMulticastUDP прослушивает все доступные IP-адреса локальной системы, включая многоадресный IP-адрес группы. Если ifi равно nil, ListenMulticastUDP использует назначенный системой интерфейс многоадресной рассылки. Однако это не рекомендуется, поскольку выбор зависит от платформы и иногда может потребовать настройки маршрутизации. Если поле Port в gaddr равно 0, номер порта выбирается автоматически.
ListenMulticastUDP предназначен лишь для удобства при разработке простых небольших приложений. Для общего применения существуют пакеты golang.org/x/net/ipv4 и golang.org/x/net/ipv6.
Обратите внимание, что ListenMulticastUDP установит для параметра сокета IP_MULTICAST_LOOP значение 0 в разделе IPPROTO_IP, чтобы отключить возврат многоадресных пакетов отправителю.
func ListenUDP
func ListenUDP(network string, laddr *UDPAddr) (*UDPConn, error)
ListenUDP действует как ListenPacket для сетей UDP.
Сеть должна иметь имя сети UDP; подробности см. в описании func Dial.
Если поле IP в laddr равно nil или содержит неопределённый IP-адрес, ListenUDP прослушивает все доступные IP-адреса локальной системы, кроме многоадресных IP-адресов. Если поле Port в laddr равно 0, номер порта выбирается автоматически.
func (*UDPConn) Close
func (c *UDPConn) Close() error
Close закрывает соединение.
func (*UDPConn) File
func (c *UDPConn) File() (f *os.File, err error)
File возвращает копию базового os.File. Вызывающий код отвечает за закрытие f по завершении работы. Закрытие c не влияет на f, а закрытие f не влияет на c.
Дескриптор файла возвращённого os.File отличается от дескриптора соединения. Попытка изменить свойства исходного объекта с помощью этой копии может как привести, так и не привести к желаемому результату.
В Windows дескриптор файла возвращённого os.File нельзя использовать в других процессах.
func (*UDPConn) LocalAddr
func (c *UDPConn) LocalAddr() Addr
LocalAddr возвращает локальный сетевой адрес. Возвращаемый Addr используется всеми вызовами LocalAddr, поэтому не изменяйте его.
func (*UDPConn) Read
func (c *UDPConn) Read(b []byte) (int, error)
Read реализует метод Read интерфейса Conn.
func (*UDPConn) ReadFrom
func (c *UDPConn) ReadFrom(b []byte) (int, Addr, error)
ReadFrom реализует метод ReadFrom интерфейса PacketConn.
func (*UDPConn) ReadFromUDP
func (c *UDPConn) ReadFromUDP(b []byte) (n int, addr *UDPAddr, err error)
ReadFromUDP работает как UDPConn.ReadFrom, но возвращает UDPAddr.
func (*UDPConn) ReadFromUDPAddrPort 1.18
func (c *UDPConn) ReadFromUDPAddrPort(b []byte) (n int, addr netip.AddrPort, err error)
ReadFromUDPAddrPort работает как ReadFrom, но возвращает netip.AddrPort.
Если c привязан к неопределённому адресу, адрес возвращённого netip.AddrPort может быть IPv4-адресом, отображённым в IPv6. Используйте netip.Addr.Unmap, чтобы получить адрес без префикса IPv6.
func (*UDPConn) ReadMsgUDP 1.1
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 можно использовать для управления параметрами сокета на уровне IP в oob.
func (*UDPConn) ReadMsgUDPAddrPort 1.18
func (c *UDPConn) ReadMsgUDPAddrPort(b, oob []byte) (n, oobn, flags int, addr netip.AddrPort, err error)
ReadMsgUDPAddrPort работает как UDPConn.ReadMsgUDP, но возвращает netip.AddrPort вместо UDPAddr.
func (*UDPConn) RemoteAddr
func (c *UDPConn) RemoteAddr() Addr
RemoteAddr возвращает удалённый сетевой адрес. Возвращаемый Addr используется всеми вызовами RemoteAddr, поэтому не изменяйте его.
func (*UDPConn) SetDeadline
func (c *UDPConn) SetDeadline(t time.Time) error
SetDeadline реализует метод SetDeadline интерфейса Conn.
func (*UDPConn) SetReadBuffer
func (c *UDPConn) SetReadBuffer(bytes int) error
SetReadBuffer задаёт размер буфера приёма операционной системы, связанного с соединением.
func (*UDPConn) SetReadDeadline
func (c *UDPConn) SetReadDeadline(t time.Time) error
SetReadDeadline реализует метод SetReadDeadline интерфейса Conn.
func (*UDPConn) SetWriteBuffer
func (c *UDPConn) SetWriteBuffer(bytes int) error
SetWriteBuffer задаёт размер буфера передачи операционной системы, связанного с соединением.
func (*UDPConn) SetWriteDeadline
func (c *UDPConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline реализует метод SetWriteDeadline интерфейса Conn.
func (*UDPConn) SyscallConn 1.9
func (c *UDPConn) SyscallConn() (syscall.RawConn, error)
SyscallConn возвращает необработанное сетевое соединение. Оно реализует интерфейс syscall.Conn.
func (*UDPConn) Write
func (c *UDPConn) Write(b []byte) (int, error)
Write реализует метод Write интерфейса Conn.
func (*UDPConn) WriteMsgUDP 1.1
func (c *UDPConn) WriteMsgUDP(b, oob []byte, addr *UDPAddr) (n, oobn int, err error)
WriteMsgUDP отправляет сообщение по адресу addr через c, если c не подключено, или на удалённый адрес c, если c подключено (в этом случае addr должен быть nil). Полезная нагрузка копируется из b, а связанные с ней внеполосные данные — из oob. Функция возвращает количество записанных байтов полезной нагрузки и внеполосных данных.
Пакеты golang.org/x/net/ipv4 и golang.org/x/net/ipv6 можно использовать для управления параметрами сокета на уровне IP в oob.
func (*UDPConn) WriteMsgUDPAddrPort 1.18
func (c *UDPConn) WriteMsgUDPAddrPort(b, oob []byte, addr netip.AddrPort) (n, oobn int, err error)
WriteMsgUDPAddrPort работает как UDPConn.WriteMsgUDP, но принимает netip.AddrPort вместо UDPAddr.
func (*UDPConn) WriteTo
func (c *UDPConn) WriteTo(b []byte, addr Addr) (int, error)
WriteTo реализует метод WriteTo интерфейса PacketConn.
Пример
Код:
// Unlike Dial, ListenPacket creates a connection without any
// association with peers.
conn, err := net.ListenPacket("udp", ":0")
if err != nil {
log.Fatal(err)
}
defer conn.Close()
dst, err := net.ResolveUDPAddr("udp", "192.0.2.1:2000")
if err != nil {
log.Fatal(err)
}
// The connection can write data to the desired address.
_, err = conn.WriteTo([]byte("data"), dst)
if err != nil {
log.Fatal(err)
}
func (*UDPConn) WriteToUDP
func (c *UDPConn) WriteToUDP(b []byte, addr *UDPAddr) (int, error)
WriteToUDP работает как UDPConn.WriteTo, но принимает UDPAddr.
func (*UDPConn) WriteToUDPAddrPort 1.18
func (c *UDPConn) WriteToUDPAddrPort(b []byte, addr netip.AddrPort) (int, error)
WriteToUDPAddrPort работает как UDPConn.WriteTo, но принимает netip.AddrPort.
type UnixAddr
UnixAddr представляет адрес конечной точки доменного сокета Unix.
В Linux имя, начинающееся с "@", обозначает абстрактный адрес сокета: при передаче адреса ядру символ "@" заменяется на байт NUL, и сокет помещается в абстрактное пространство имён, а не в файловую систему. Абстрактные сокеты — это особенность Linux; на других платформах имя, начинающееся с "@", рассматривается как буквальный путь в файловой системе.
type UnixAddr struct {
Name string
Net string
}
func ResolveUnixAddr
func ResolveUnixAddr(network, address string) (*UnixAddr, error)
ResolveUnixAddr возвращает адрес конечной точки доменного сокета Unix.
Сеть должна быть именем сети Unix.
Описание параметров сети и адреса см. в описании функции Dial.
func (*UnixAddr) Network
func (a *UnixAddr) Network() string
Network возвращает имя сети адреса: "unix", "unixgram" или "unixpacket".
func (*UnixAddr) String
func (a *UnixAddr) String() string
type UnixConn
UnixConn реализует интерфейс Conn для соединений с доменными сокетами Unix.
type UnixConn struct {
// contains filtered or unexported fields
}
func DialUnix
func DialUnix(network string, laddr, raddr *UnixAddr) (*UnixConn, error)
DialUnix работает как Dial для сетей Unix.
Сеть должна быть именем сети Unix; подробности см. в описании функции Dial.
Если laddr не равен nil, он используется в качестве локального адреса соединения.
func ListenUnixgram
func ListenUnixgram(network string, laddr *UnixAddr) (*UnixConn, error)
ListenUnixgram работает как ListenPacket для сетей Unix.
Сеть должна быть "unixgram".
func (*UnixConn) Close
func (c *UnixConn) Close() error
Close закрывает соединение.
func (*UnixConn) CloseRead 1.1
func (c *UnixConn) CloseRead() error
CloseRead прекращает чтение из доменного соединения Unix. Большинству вызывающих программ следует просто использовать UnixConn.Close.
func (*UnixConn) CloseWrite 1.1
func (c *UnixConn) CloseWrite() error
CloseWrite прекращает запись в доменное соединение Unix. Большинству вызывающих программ следует просто использовать UnixConn.Close.
func (*UnixConn) File
func (c *UnixConn) File() (f *os.File, err error)
File возвращает копию базового os.File. Вызывающий код должен закрыть f по завершении работы. Закрытие c не влияет на f, а закрытие f не влияет на c.
Дескриптор файла возвращённого os.File отличается от дескриптора соединения. Попытка изменить свойства оригинала с помощью этого дубликата может привести или не привести к желаемому результату.
В Windows дескриптор файла возвращённого os.File нельзя использовать в других процессах.
func (*UnixConn) LocalAddr
func (c *UnixConn) LocalAddr() Addr
LocalAddr возвращает локальный сетевой адрес. Возвращаемый Addr является общим для всех вызовов LocalAddr, поэтому не изменяйте его.
func (*UnixConn) Read
func (c *UnixConn) Read(b []byte) (int, error)
Read реализует метод Read интерфейса Conn.
func (*UnixConn) ReadFrom
func (c *UnixConn) ReadFrom(b []byte) (int, Addr, error)
ReadFrom реализует метод PacketConn.ReadFrom.
func (*UnixConn) ReadFromUnix
func (c *UnixConn) ReadFromUnix(b []byte) (int, *UnixAddr, error)
ReadFromUnix работает как UnixConn.ReadFrom, но возвращает UnixAddr.
func (*UnixConn) ReadMsgUnix
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 (*UnixConn) RemoteAddr
func (c *UnixConn) RemoteAddr() Addr
RemoteAddr возвращает удалённый сетевой адрес. Возвращаемый Addr является общим для всех вызовов RemoteAddr, поэтому не изменяйте его.
func (*UnixConn) SetDeadline
func (c *UnixConn) SetDeadline(t time.Time) error
SetDeadline реализует метод SetDeadline интерфейса Conn.
func (*UnixConn) SetReadBuffer
func (c *UnixConn) SetReadBuffer(bytes int) error
SetReadBuffer задаёт размер буфера приёма операционной системы, связанного с соединением.
func (*UnixConn) SetReadDeadline
func (c *UnixConn) SetReadDeadline(t time.Time) error
SetReadDeadline реализует метод SetReadDeadline интерфейса Conn.
func (*UnixConn) SetWriteBuffer
func (c *UnixConn) SetWriteBuffer(bytes int) error
SetWriteBuffer задаёт размер буфера передачи операционной системы, связанного с соединением.
func (*UnixConn) SetWriteDeadline
func (c *UnixConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline реализует метод SetWriteDeadline интерфейса Conn.
func (*UnixConn) SyscallConn 1.9
func (c *UnixConn) SyscallConn() (syscall.RawConn, error)
SyscallConn возвращает низкоуровневое сетевое соединение. Оно реализует интерфейс syscall.Conn.
func (*UnixConn) Write
func (c *UnixConn) Write(b []byte) (int, error)
Write реализует метод Write интерфейса Conn.
func (*UnixConn) WriteMsgUnix
func (c *UnixConn) WriteMsgUnix(b, oob []byte, addr *UnixAddr) (n, oobn int, err error)
WriteMsgUnix отправляет сообщение по адресу addr через c, копируя полезную нагрузку из b, а связанные с ней внеполосные данные — из oob. Метод возвращает число записанных байтов полезной нагрузки и внеполосных данных.
Обратите внимание: если len(b) == 0 и len(oob) > 0, эта функция всё равно запишет 1 байт в соединение.
func (*UnixConn) WriteTo
func (c *UnixConn) WriteTo(b []byte, addr Addr) (int, error)
WriteTo реализует метод PacketConn.WriteTo.
func (*UnixConn) WriteToUnix
func (c *UnixConn) WriteToUnix(b []byte, addr *UnixAddr) (int, error)
WriteToUnix работает как UnixConn.WriteTo, но принимает UnixAddr.
type UnixListener
UnixListener — это прослушиватель доменных сокетов Unix. Клиентам обычно следует использовать переменные типа Listener, а не полагаться на доменные сокеты Unix.
type UnixListener struct {
// contains filtered or unexported fields
}
func ListenUnix
func ListenUnix(network string, laddr *UnixAddr) (*UnixListener, error)
ListenUnix работает как Listen для сетей Unix.
Сеть должна быть "unix" или "unixpacket".
func (*UnixListener) Accept
func (l *UnixListener) Accept() (Conn, error)
Accept реализует метод Accept интерфейса Listener. Возвращаемые соединения будут иметь тип *UnixConn.
func (*UnixListener) AcceptUnix
func (l *UnixListener) AcceptUnix() (*UnixConn, error)
AcceptUnix принимает следующий входящий вызов и возвращает новое соединение.
func (*UnixListener) Addr
func (l *UnixListener) Addr() Addr
Addr возвращает сетевой адрес прослушивателя. Возвращаемый Addr является общим для всех вызовов Addr, поэтому не изменяйте его.
func (*UnixListener) Close
func (l *UnixListener) Close() error
Close прекращает прослушивание Unix-адреса. Уже принятые соединения не закрываются.
func (*UnixListener) File
func (l *UnixListener) File() (f *os.File, err error)
File возвращает копию базового os.File. Вызывающий код должен закрыть f по завершении работы. Закрытие l не влияет на f, а закрытие f не влияет на l.
Дескриптор файла возвращённого os.File отличается от дескриптора соединения. Попытка изменить свойства оригинала с помощью этого дубликата может привести или не привести к желаемому результату.
В Windows дескриптор файла возвращённого os.File нельзя использовать в других процессах.
func (*UnixListener) SetDeadline
func (l *UnixListener) SetDeadline(t time.Time) error
SetDeadline задаёт срок ожидания, связанный с прослушивателем. Нулевое значение времени отключает срок ожидания.
func (*UnixListener) SetUnlinkOnClose 1.8
func (l *UnixListener) SetUnlinkOnClose(unlink bool)
SetUnlinkOnClose задаёт, следует ли удалять файл базового сокета из файловой системы при закрытии прослушивателя.
По умолчанию файл сокета удаляется только в том случае, если его создал пакет net. То есть если прослушиватель и базовый файл сокета были созданы вызовом Listen или ListenUnix, то при закрытии прослушивателя файл сокета будет удалён. Однако если прослушиватель был создан вызовом FileListener для использования уже существующего файла сокета, то по умолчанию при закрытии прослушивателя файл сокета не удаляется.
func (*UnixListener) SyscallConn 1.10
func (l *UnixListener) SyscallConn() (syscall.RawConn, error)
SyscallConn возвращает низкоуровневое сетевое соединение. Оно реализует интерфейс syscall.Conn.
Возвращаемый syscall.RawConn поддерживает только вызов Control. Вызовы Read и Write возвращают ошибку.
type UnknownNetworkError
type UnknownNetworkError string
func (UnknownNetworkError) Error
func (e UnknownNetworkError) Error() string
func (UnknownNetworkError) Temporary
func (e UnknownNetworkError) Temporary() bool
func (UnknownNetworkError) Timeout
func (e UnknownNetworkError) Timeout() bool
Ошибки
- ☞
В JS функции FileConn, FileListener и FilePacketConn не реализованы.
- ☞
В JS методы и функции, связанные с Interface, не реализованы.
- ☞
В AIX, DragonFly BSD, NetBSD, OpenBSD, Plan 9 и Solaris метод MulticastAddrs интерфейса Interface не реализован.
- ☞
На всех POSIX-платформах чтение из сети "ip4" с помощью метода ReadFrom или ReadFromIP может не вернуть полный пакет IPv4, включая его заголовок, даже если доступно свободное место. Это может происходить даже в случаях, когда Read или ReadMsgIP могли бы вернуть полный пакет. По этой причине рекомендуется не использовать эти методы, если важно получить полный пакет.
Правила совместимости Go 1 не позволяют нам изменить поведение этих методов; вместо них используйте Read или ReadMsgIP.
- ☞
В JS и Plan 9 методы и функции, связанные с IPConn, не реализованы.
- ☞
В DragonFly BSD и OpenBSD прослушивание сетей "tcp" и "udp" не принимает подключения одновременно по IPv4 и IPv6. Это связано с тем, что трафик IPv4 не будет направляться на сокет IPv6 — для поддержки обоих семейств адресов требуются два отдельных сокета. Подробности см. в inet6(4).
- ☞
В Windows метод Write типа syscall.RawConn не интегрирован с сетевым опросчиком среды выполнения. Он не может ожидать, пока соединение станет доступным для записи, и не учитывает сроки ожидания. Если предоставленный пользователем обратный вызов возвращает false, метод Write немедленно завершается с ошибкой.
- ☞
В JS и Plan 9 методы Control, Read и Write типа syscall.RawConn не реализованы.
- ☞
В JS метод File типов TCPConn и TCPListener не реализован.
- ☞
В Plan 9 методы ReadMsgUDP и WriteMsgUDP типа UDPConn не реализованы.
- ☞
В JS методы и функции, связанные с UDPConn, не реализованы.
- ☞
В JS, WASIP1 и Plan 9 методы и функции, связанные с UnixConn и UnixListener, не реализованы.
- ☞
В Windows методы и функции, связанные с UnixConn и UnixListener, не работают для "unixgram" и "unixpacket".
Подкаталоги
| Название | Краткое описание |
|---|---|
| .. | |
| http | Пакет http предоставляет реализации HTTP-клиента и HTTP-сервера. |
| cgi | Пакет cgi реализует CGI (Common Gateway Interface) согласно спецификации RFC 3875. |
| cookiejar | Пакет cookiejar реализует соответствующий [RFC 6265] [http.CookieJar] в памяти. |
| fcgi | Пакет fcgi реализует протокол FastCGI. |
| httptest | Пакет httptest предоставляет инструменты для тестирования HTTP. |
| httptrace | Пакет httptrace предоставляет средства для отслеживания событий в HTTP-запросах клиента. |
| httputil | Пакет httputil предоставляет вспомогательные функции HTTP, дополняющие более распространённые функции пакета net/http. |
| pprof | Пакет pprof предоставляет через HTTP-сервер данные профилирования среды выполнения в формате, ожидаемом инструментом визуализации pprof. |
| Пакет mail реализует разбор почтовых сообщений. | |
| netip | Пакет netip определяет тип IP-адреса, представляющий собой компактное значение. |
| rpc | Пакет rpc предоставляет доступ к экспортируемым методам объекта через сеть или другое соединение ввода-вывода. |
| jsonrpc | Пакет jsonrpc реализует ClientCodec и ServerCodec для JSON-RPC 1.0 в пакете rpc. |
| smtp | Пакет smtp реализует протокол Simple Mail Transfer Protocol, определённый в RFC 5321. |
| textproto | Пакет textproto реализует универсальную поддержку текстовых протоколов запросов и ответов, таких как HTTP, NNTP и SMTP. |
| url | Пакет url разбирает URL и реализует экранирование параметров запроса. |
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/net/