Как остановить сервер прослушивания в Go

Я пытался найти способ остановить слушающий сервер в Go изящно. Так какlisten.Accept блоки, необходимо закрыть сокет прослушивания, чтобы сигнализировать об окончании, но я могуне сообщать об этой ошибке отдельно от других ошибок, поскольку соответствующая ошибка нет экспортировано.

Могу ли я сделать лучше, чем это? УвидетьFIXME в коде ниже вserve()

package main

import (
    "io"
    "log"
    "net"
    "time"
)

// Echo server struct
type EchoServer struct {
    listen net.Listener
    done   chan bool
}

// Respond to incoming connection
//
// Write the address connected to then echo
func (es *EchoServer) respond(remote *net.TCPConn) {
    defer remote.Close()
    _, err := io.Copy(remote, remote)
    if err != nil {
        log.Printf("Error: %s", err)
    }
}

// Listen for incoming connections
func (es *EchoServer) serve() {
    for {
        conn, err := es.listen.Accept()
        // FIXME I'd like to detect "use of closed network connection" here
        // FIXME but it isn't exported from net
        if err != nil {
            log.Printf("Accept failed: %v", err)
            break
        }
        go es.respond(conn.(*net.TCPConn))
    }
    es.done 

Ответы на вопрос(4)

Ваш ответ на вопрос