golang epoll发送消息后必须关闭socket吗?

时间:2018-01-31 00:49:30

标签: sockets go epoll

go func() {
    for req := range respChan {
        content := make([]byte, 0, 1024*32)
        content = append(content, []byte("HTTP1.1 200 OK\r\n")...)
        for k, v := range req.Response.Headers {
            content = append(content, []byte(fmt.Sprintf("%s:%s\r\n", k, v))...)
        }
        content = append(content, []byte("\r\n")...)
        content = append(content, req.Response.Content...)
        fmt.Println(string(content[:]))
        _, err := syscall.Write(int(req.Fd), content)
        handleEpollError(err)
    }
}()

我尝试通过linux epoll实现一个http服务器,eventing是可以的,但是在服务器完成socket发送后,浏览器总是在等待,直到我中断进程。我应该发送一些终止字符还是进行其他终止操作?以上只是通过socket编写http响应的代码。

1 个答案:

答案 0 :(得分:0)

状态行上有拼写错误。使用

content = append(content, []byte("HTTP/1.1 200 OK\r\n")...)

服务器应该执行以下操作之一来终止请求正文:

  • 使用正文的长度指定Content-Length标头。
  • 使用终止块写一个分块响应。
  • 在写回复后指定Connection: close标题并关闭连接。