Commit f69b52b1 authored by Tatsuhiro Tsujikawa's avatar Tatsuhiro Tsujikawa

nghttpx: Attempt to avoid TCP RST on socket closure on Linux

parent 1e1d908c
......@@ -126,7 +126,20 @@ void Connection::disconnect() {
}
if (fd != -1) {
shutdown(fd, SHUT_WR);
// At least for Linux, shutdown both sides, and continue to read
// until it gets EOF or error in order to avoid TCP RST.
shutdown(fd, SHUT_RDWR);
#ifdef __linux__
std::array<uint8_t, 16_k> b;
for (;;) {
ssize_t n;
while ((n = read(fd, b.data(), b.size())) == -1 && errno == EINTR)
;
if (n <= 0) {
break;
}
}
#endif // __linux__
close(fd);
fd = -1;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment