РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1101 of 1593 menu

Тип net.UnixConn

Тип net.UnixConn представляет собой соединение с Unix-сокетом. Он реализует интерфейс net.Conn и предоставляет дополнительные методы для работы с Unix-адресами. В качестве первого параметра при создании указывается тип сети ("unix", "unixgram", "unixpacket"), а во второй параметр передается путь к файлу сокета.

Синтаксис

conn, err := net.Dial("unix", "/tmp/socket.sock") if err != nil { log.Fatal(err) } defer conn.Close() unixConn := conn.(*net.UnixConn)

Пример чтения из Unix-сокета

Давайте создадим клиент, который подключается к Unix-сокету и читает данные:

package main import ( "fmt" "log" "net" "os" ) func main() { // Подключаемся к Unix-сокету conn, err := net.Dial("unix", "/tmp/socket.sock") if err != nil { log.Fatal(err) } defer conn.Close() // Приводим к типу UnixConn unixConn := conn.(*net.UnixConn) // Читаем данные из сокета buf := make([]byte, 1024) n, err := unixConn.Read(buf) if err != nil { log.Fatal(err) } fmt.Printf("Получено %d байт: %s\n", n, string(buf[:n])) }

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

"Получено 12 байт: Hello, World"

Пример записи в Unix-сокет

Отправим сообщение в Unix-сокет, используя метод Write:

package main import ( "log" "net" ) func main() { // Подключаемся к Unix-сокету conn, err := net.Dial("unix", "/tmp/socket.sock") if err != nil { log.Fatal(err) } defer conn.Close() unixConn := conn.(*net.UnixConn) // Отправляем сообщение msg := []byte("Hello from client") _, err = unixConn.Write(msg) if err != nil { log.Fatal(err) } log.Println("Сообщение отправлено") }

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

"Сообщение отправлено"

Пример CloseRead и CloseWrite

Тип net.UnixConn позволяет закрыть отдельно чтение или запись:

package main import ( "log" "net" ) func main() { conn, err := net.Dial("unix", "/tmp/socket.sock") if err != nil { log.Fatal(err) } defer conn.Close() unixConn := conn.(*net.UnixConn) // Закрываем только чтение err = unixConn.CloseRead() if err != nil { log.Fatal(err) } // Закрываем только запись err = unixConn.CloseWrite() if err != nil { log.Fatal(err) } log.Println("Чтение и запись закрыты отдельно") }

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

"Чтение и запись закрыты отдельно"

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

  • тип net.UnixAddr,
    который представляет адрес Unix-сокета
  • интерфейс net.Conn,
    который реализует net.UnixConn
  • функцию net.Dial,
    которая создает соединение с Unix-сокетом
  • тип net.TCPConn,
    который представляет TCP-соединение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить