Как в golang корректно обработать http запрос используя сокеты?
Я использую SetReadDeadline для задания максимального времени ожидания, но приходится ждать указанное время прежде чем сервер начнет отвечать. Как сделать правильно? P.s. новичок в golang, в сокетах тоже.
9 func main() {
10 if len(os.Args) != 3 {
11 fmt.Println("No host/port specified")
12 fmt.Println("Expected: [host] [port]")
13 }
14
15 host := os.Args[1]
16 port := os.Args[2]
17
18 listener, _ := net.Listen(
19 "tcp",
20 host + ":" + port,
21 )
22
23 for {
24 c, e := listener.Accept()
25 t := time.Now().Add(time.Second * 5)
26 c.SetReadDeadline(t)
27
28 if e != nil { continue }
29 go handle(c)
30 }
31 }
33 func handle(c net.Conn) {
34 defer c.Close()
35 fmt.Println("Handled")
36
37 buffer := make([]byte, 1024, 1024)
38 request := make([]byte, 0, 2048)
39
40 for {
41 l, e := c.Read(buffer)
42 if e != nil { break }
43 if l == 0 { break }
44 request = append(request, buffer...)
45 // fmt.Println(l)
46 // fmt.Print(string(buffer))
47 }
48
49 fmt.Println(string(request))
50 response := getResponse(string(request))
51 c.Write([]byte(response))
52 }