diff --git a/server.go b/server.go index fd1d96b..d21fbf1 100644 --- a/server.go +++ b/server.go @@ -4,6 +4,7 @@ import ( "bufio" "crypto/tls" "errors" + "fmt" "net" "strings" "sync" @@ -92,9 +93,27 @@ func (s *Server) ListenUDP(addr string) error { if err != nil { return err } - connection.SetReadBuffer(datagramReadBufferSize) - s.connections = append(s.connections, connection) + return s.listenUDP(connection) +} + +func (s *Server) listenUDP(conn *net.UDPConn) error { + conn.SetReadBuffer(datagramReadBufferSize) + + s.connections = append(s.connections, conn) + return nil +} + +//ListenOn user defined socket +func (s *Server) ListenOn(conn interface{}) error { + switch c := conn.(type) { + case *net.UDPConn: + return s.listenUDP(c) + case *net.UnixConn: + return s.listenUnixgram(c) + default: + return fmt.Errorf("unknown socket type") + } return nil } @@ -109,9 +128,14 @@ func (s *Server) ListenUnixgram(addr string) error { if err != nil { return err } - connection.SetReadBuffer(datagramReadBufferSize) - s.connections = append(s.connections, connection) + return s.listenUnixgram(connection) +} + +func (s *Server) listenUnixgram(conn *net.UnixConn) error { + conn.SetReadBuffer(datagramReadBufferSize) + + s.connections = append(s.connections, conn) return nil }