douchun3680 2019-01-05 07:25
浏览 105

响应后如何关闭连接(使用UNIX套接字)

After some responses socket stays connected and it leaks fd.

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

How to force close connection after the each response?

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
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 MATLAB怎么通过柱坐标变换画开口是圆形的旋转抛物面?
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
    • ¥50 树莓派安卓APK系统签名
    • ¥65 汇编语言除法溢出问题
    • ¥15 Visual Studio问题
    • ¥20 求一个html代码,有偿