Использование os.OpenFile () вместо net.Listen () - PullRequest
0 голосов
/ 03 июля 2019

Я погрузился в стек вызовов os.OpenFile и net.Listen, чтобы посмотреть, смогу ли я создать сокет домена UNIX, используя os.OpenFile. Ниже моя попытка. Но после отслеживания обоих стеков вызовов (os.OpenFile и net.Listen) я все еще в замешательстве. Приведенный ниже код, по-видимому, не читает файл и сохраняет данные в файловой системе.

  1. Как реализовать сокет домена UNIX, используя os.OpenFile?
  2. Какова цель os.ModeSocket, если она не используется с os.OpenFile для создания сокета UNIX?
package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    sock, err := os.OpenFile("f.sock", os.O_RDWR|os.O_CREATE, os.ModeSocket|os.ModePerm)
    defer sock.Close()
    if err != nil {
        log.Panic(err)
    }
    n, err := sock.WriteString("hello\n")
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(n)
    }
    b := make([]byte, 10)
    n, err = sock.Read(b)
    fmt.Println(n)
    if err != nil {
        fmt.Println("error reading: ", err)
    }
    fmt.Println(b)
}

1 Ответ

3 голосов
/ 03 июля 2019
  1. Нет.OpenFile - это обобщенный API для открытия файла, используйте net.Listen("unixpacket", "f.sock") или net.Dial("unixpacket", "f.sock"), если вы хотите работать с сокетом Unix

  2. os.ModeSocket - это просто * nix зарегистрированный флаг для сокетаfd, используйте, когда вы хотите фильтровать типы fd

...