2
0

listener.go 538 B

123456789101112131415161718192021222324252627282930313233343536
  1. package service
  2. import (
  3. "io"
  4. "net"
  5. )
  6. type tcpListener struct {
  7. port uint16
  8. s *Service
  9. addr *net.TCPAddr
  10. accept chan net.Conn
  11. }
  12. func (l *tcpListener) Accept() (net.Conn, error) {
  13. conn, ok := <-l.accept
  14. if !ok {
  15. return nil, io.EOF
  16. }
  17. return conn, nil
  18. }
  19. func (l *tcpListener) Close() error {
  20. l.s.mu.Lock()
  21. defer l.s.mu.Unlock()
  22. delete(l.s.mu.listeners, uint16(l.addr.Port))
  23. close(l.accept)
  24. return nil
  25. }
  26. // Addr returns the listener's network address.
  27. func (l *tcpListener) Addr() net.Addr {
  28. return l.addr
  29. }