MCPcopy
hub / github.com/cloudflare/tableflip / Example_tcpServer

Function Example_tcpServer

tcp_example_test.go:17–75  ·  view source on GitHub ↗

This shows how to use the Upgrader with a listener based service.

()

Source from the content-addressed store, hash-verified

15// This shows how to use the Upgrader
16// with a listener based service.
17func Example_tcpServer() {
18 var (
19 listenAddr = flag.String("listen", "localhost:8080", "`Address` to listen on")
20 pidFile = flag.String("pid-file", "", "`Path` to pid file")
21 )
22
23 flag.Parse()
24 log.SetPrefix(fmt.Sprintf("%d ", os.Getpid()))
25
26 upg, err := tableflip.New(tableflip.Options{
27 PIDFile: *pidFile,
28 })
29 if err != nil {
30 panic(err)
31 }
32 defer upg.Stop()
33
34 // Do an upgrade on SIGHUP
35 go func() {
36 sig := make(chan os.Signal, 1)
37 signal.Notify(sig, syscall.SIGHUP)
38 for range sig {
39 err := upg.Upgrade()
40 if err != nil {
41 log.Println("upgrade failed:", err)
42 }
43 }
44 }()
45
46 ln, err := upg.Fds.Listen("tcp", *listenAddr)
47 if err != nil {
48 log.Fatalln("Can't listen:", err)
49 }
50
51 go func() {
52 defer ln.Close()
53
54 log.Printf("listening on %s", ln.Addr())
55
56 for {
57 c, err := ln.Accept()
58 if err != nil {
59 return
60 }
61
62 go func() {
63 c.SetDeadline(time.Now().Add(time.Second))
64 c.Write([]byte("It is a mistake to think you can solve any major problems just with potatoes.\n"))
65 c.Close()
66 }()
67 }
68 }()
69
70 log.Printf("ready")
71 if err := upg.Ready(); err != nil {
72 panic(err)
73 }
74 <-upg.Exit()

Callers

nothing calls this directly

Calls 7

NewFunction · 0.92
StopMethod · 0.65
UpgradeMethod · 0.65
ListenMethod · 0.65
ReadyMethod · 0.65
ExitMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…