aboutsummaryrefslogtreecommitdiff
path: root/listen.go
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2021-08-27 18:59:27 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2021-08-27 18:59:27 +0200
commitb21345fba99d38c5e5ade695e32fc9e23ea48e98 (patch)
tree3d90d8abd9d356109d8690c5babd481abb363b55 /listen.go
parentca7c62308867f27a607fd17d72f926fcda05bb32 (diff)
Basic authentication server and content multiplexer
Diffstat (limited to 'listen.go')
-rw-r--r--listen.go47
1 files changed, 47 insertions, 0 deletions
diff --git a/listen.go b/listen.go
new file mode 100644
index 0000000..c1266b5
--- /dev/null
+++ b/listen.go
@@ -0,0 +1,47 @@
+package main
+
+import (
+ "fmt"
+ "net"
+
+ "github.com/anon55555/mt"
+)
+
+type listener struct {
+ mtListener mt.Listener
+}
+
+func listen(pc net.PacketConn) *listener {
+ return &listener{
+ mtListener: mt.Listen(pc),
+ }
+}
+
+func (l *listener) close() error {
+ return l.mtListener.Close()
+}
+
+func (l *listener) addr() net.Addr { return l.mtListener.Addr() }
+
+func (l *listener) accept() (*clientConn, error) {
+ p, err := l.mtListener.Accept()
+ if err != nil {
+ return nil, err
+ }
+
+ cc := &clientConn{
+ Peer: p,
+ initCh: make(chan struct{}),
+ }
+
+ cc.log("-->", "connect")
+ go handleClt(cc)
+
+ select {
+ case <-cc.Closed():
+ return nil, fmt.Errorf("%s is closed", cc.RemoteAddr())
+ default:
+ }
+
+ return cc, nil
+}