Функция net.DialTimeout

Функция net.DialTimeout устанавливает сетевое соединение с указанным таймаутом. В отличие от net.Dial, она позволяет ограничить время ожидания подключения. В первый параметр передается тип сети ("tcp", "udp", "unix" и т.д.), во второй параметр передается адрес для подключения (например "localhost:8080"), а в третий параметр передается продолжительность таймаута. Если соединение не установлено за указанное время, функция возвращает ошибку.

Синтаксис

gonet.DialTimeout(network, address, timeout)

Пример

Давайте попробуем подключиться к локальному серверу с таймаутом в 2 секунды:

gopackage main

import (
  "fmt"
  "net"
  "time"
)

func main() {
  conn, err := net.DialTimeout("tcp", "localhost:8080", 2*time.Second)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer conn.Close()
  fmt.Println("connected successfully")
}

Результат выполнения кода при успешном подключении:

go"connected successfully"

Пример

Попробуем подключиться к недоступному хосту с таймаутом в 1 секунду:

gopackage main

import (
  "fmt"
  "net"
  "time"
)

func main() {
  conn, err := net.DialTimeout("tcp", "192.0.2.1:80", 1*time.Second)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer conn.Close()
  fmt.Println("connected successfully")
}

Результат выполнения кода:

go"dial tcp 192.0.2.1:80: i/o timeout"

Пример

Используем таймаут с UDP подключением:

gopackage main

import (
  "fmt"
  "net"
  "time"
)

func main() {
  conn, err := net.DialTimeout("udp", "8.8.8.8:53", 3*time.Second)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer conn.Close()
  fmt.Println("udp connection established")
}

Результат выполнения кода:

go"udp connection established"

Смотрите также

  • функцию net.Dial,
    которая устанавливает соединение без ограничения по времени
  • функцию net.Listen,
    которая создает сетевой слушатель для входящих подключений
  • тип net.Dialer,
    который предоставляет более гибкую настройку подключений
  • тип net.Conn,
    представляющий сетевое соединение для чтения и записи данных