listener.go 594 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package gateway
  2. import (
  3. "io"
  4. "net"
  5. )
  6. type Listener struct {
  7. addr net.Addr
  8. ch chan net.Conn
  9. }
  10. func (l *Listener) Receive(conn net.Conn) {
  11. select {
  12. case l.ch <- conn:
  13. default:
  14. }
  15. }
  16. func (l *Listener) Accept() (net.Conn, error) {
  17. select {
  18. case c, ok := <-l.ch:
  19. if ok {
  20. return c, nil
  21. } else {
  22. return nil, io.ErrClosedPipe
  23. }
  24. }
  25. }
  26. func (l *Listener) Close() error {
  27. close(l.ch)
  28. return nil
  29. }
  30. func (l *Listener) Addr() net.Addr {
  31. return l.addr
  32. }
  33. func NewListener(addr net.Addr) *Listener {
  34. l := &Listener{
  35. addr: addr,
  36. ch: make(chan net.Conn, 2),
  37. }
  38. return l
  39. }