123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package gateway
- import (
- "io"
- "net"
- )
- type Listener struct {
- addr net.Addr
- ch chan net.Conn
- }
- func (l *Listener) Receive(conn net.Conn) {
- select {
- case l.ch <- conn:
- default:
- }
- }
- func (l *Listener) Accept() (net.Conn, error) {
- select {
- case c, ok := <-l.ch:
- if ok {
- return c, nil
- }
- return nil, io.ErrClosedPipe
- }
- }
- func (l *Listener) Close() error {
- close(l.ch)
- return nil
- }
- func (l *Listener) Addr() net.Addr {
- return l.addr
- }
- func NewListener(addr net.Addr) *Listener {
- l := &Listener{
- addr: addr,
- ch: make(chan net.Conn, 2),
- }
- return l
- }
|