golang epoll 发送消息后必须关闭套接字吗?
golang epoll must close socket after sending message?
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 服务器,虽然一切正常,但浏览器总是在服务器完成通过套接字发送后一直等待,直到我中断进程。我应该发送一些终止字符还是做其他终止操作?以上只是socket写http响应的代码。
状态行中有错字。使用
content = append(content, []byte("HTTP/1.1 200 OK\r\n")...)
服务器应该执行以下操作之一来终止请求 body:
- 用 body 的长度指定 Content-Length header。
- 写一个带有终止块的分块响应。
- 指定
Connection: close
header 并在写入响应后关闭连接。
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 服务器,虽然一切正常,但浏览器总是在服务器完成通过套接字发送后一直等待,直到我中断进程。我应该发送一些终止字符还是做其他终止操作?以上只是socket写http响应的代码。
状态行中有错字。使用
content = append(content, []byte("HTTP/1.1 200 OK\r\n")...)
服务器应该执行以下操作之一来终止请求 body:
- 用 body 的长度指定 Content-Length header。
- 写一个带有终止块的分块响应。
- 指定
Connection: close
header 并在写入响应后关闭连接。