server.go 975 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package tcp
  2. import (
  3. "fmt"
  4. "log"
  5. "net"
  6. "os"
  7. "os/signal"
  8. "syscall"
  9. )
  10. // NewTCPServer make TCP server
  11. func NewTCPServer(addr string, cb func(*net.TCPConn)) {
  12. logger := log.New(os.Stdout, "INFO: ", log.LstdFlags)
  13. errc := make(chan error)
  14. go func() {
  15. c := make(chan os.Signal)
  16. signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
  17. errc <- fmt.Errorf("%s", <-c)
  18. }()
  19. tcpaddr, err := net.ResolveTCPAddr("tcp", addr)
  20. if err != nil {
  21. logger.Fatalf("listen error: %v", err)
  22. return
  23. }
  24. listen, err := net.ListenTCP("tcp", tcpaddr)
  25. if err != nil {
  26. logger.Fatalf("listen error: %v", err)
  27. return
  28. }
  29. defer listen.Close()
  30. go func() {
  31. logger.Println("TCP Listen", addr)
  32. for {
  33. conn, err := listen.AcceptTCP()
  34. if err != nil {
  35. errc <- err
  36. logger.Fatalf("accept error: %v", err)
  37. //util.LogDebug("accept error:", err)
  38. break
  39. }
  40. go cb(conn)
  41. }
  42. logger.Println("Exit server", "Quit")
  43. }()
  44. logger.Println("TCP Service Exit", <-errc)
  45. }