plistener.go 786 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package mux
  2. import (
  3. "errors"
  4. "net"
  5. )
  6. type PortListener struct {
  7. net.Listener
  8. connCh chan *PortConn
  9. addr net.Addr
  10. isClose bool
  11. }
  12. func NewPortListener(connCh chan *PortConn, addr net.Addr) *PortListener {
  13. return &PortListener{
  14. connCh: connCh,
  15. addr: addr,
  16. }
  17. }
  18. func (pListener *PortListener) Accept() (net.Conn, error) {
  19. if pListener.isClose {
  20. return nil, errors.New("the listener has closed")
  21. }
  22. conn := <-pListener.connCh
  23. if conn != nil {
  24. return conn, nil
  25. }
  26. return nil, errors.New("the listener has closed")
  27. }
  28. func (pListener *PortListener) Close() error {
  29. //close
  30. if pListener.isClose {
  31. return errors.New("the listener has closed")
  32. }
  33. pListener.isClose = true
  34. return nil
  35. }
  36. func (pListener *PortListener) Addr() net.Addr {
  37. return pListener.addr
  38. }