Browse Source

tcp server

ls 5 years ago
parent
commit
ff47a62fae
1 changed files with 51 additions and 0 deletions
  1. 51 0
      tcp/server.go

+ 51 - 0
tcp/server.go

@@ -0,0 +1,51 @@
+package tcp
+
+import (
+	"fmt"
+	"log"
+	"net"
+	"os"
+	"os/signal"
+	"syscall"
+)
+
+// NewServer make TCP server
+func NewServer(addr string, cb func(*net.TCPConn)) {
+	logger := log.New(os.Stdout, "INFO: ", log.LstdFlags)
+
+	errc := make(chan error)
+	go func() {
+		c := make(chan os.Signal)
+		signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
+		errc <- fmt.Errorf("%s", <-c)
+	}()
+
+	tcpaddr, err := net.ResolveTCPAddr("tcp", addr)
+	if err != nil {
+		logger.Fatalf("listen error: %v", err)
+		return
+	}
+
+	listen, err := net.ListenTCP("tcp", tcpaddr)
+	if err != nil {
+		logger.Fatalf("listen error: %v", err)
+		return
+	}
+	defer listen.Close()
+
+	go func() {
+		logger.Println("TCP Listen", addr)
+		for {
+			conn, err := listen.AcceptTCP()
+			if err != nil {
+				errc <- err
+				logger.Fatalf("accept error: %v", err)
+				break
+			}
+			go cb(conn)
+		}
+		logger.Println("Exit server", "Quit")
+	}()
+
+	logger.Println("TCP Service Exit", <-errc)
+}