Как закрыть соединение после ответа (используя сокеты unix) - PullRequest
0 голосов
/ 05 января 2019

После некоторых ответов сокет остается подключенным и пропускает fd.

...
unix  2      [ ]         STREAM     CONNECTED     30973530 /tmp/cfs
unix  2      [ ]         STREAM     CONNECTED     30972715 /tmp/cfs
unix  3      [ ]         STREAM     CONNECTED     31023652 /tmp/cfs
...

Как принудительно закрыть соединение после каждого ответа?

package main

import (
    "log"
    "net"
    "net/http"
    "os"
    "sync"
    "syscall"
)

type Server struct {
    net.Listener
    socketPath string
    isClosed   bool
    sync.Mutex
}

func StartServer(socketPath string, mux *http.ServeMux) (server *Server, err error) {
    if listener, err := newListener(socketPath); err == nil {
        server = &Server{listener, socketPath, false, sync.Mutex{}}
        go func() {
            if err := http.Serve(server, mux); err != nil && !server.IsClosed() {
                log.Print("ERROR unable to serve: ", err)
            }
        }()
        log.Println("Server listening to " + socketPath)
    }
    return
}

func (this *Server) IsClosed() bool {
    return this.isClosed
}

func newListener(socketPath string) (listener net.Listener, err error) {
    os.Remove(socketPath)
    syscall.Umask(0000)
    listener, err = net.Listen("unix", socketPath)
    listener.Addr()
    return
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...