You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have observed a network TCP server blocked on a Write although the client (Go program
located on a remote machine) has closed the connection.
So far I have been unable to produce a minimal reproducer.
My hypothesis is that the poller is not handling EPOLLRDHUP correctly. map epoll_ctl(2)
says that it means: "Stream socket peer closed connection, or shut down writing
half of connection."
But when obtaining EPOLLRDHUP from the socket the poller wakes up WaitRead() but not
WaitWrite(), so if the EPOLLRDHUP was generated by a remote close, waiting writers will
never wake up (one would expect something like "connection reset by peer").
Using linux/amd64.
The text was updated successfully, but these errors were encountered:
Writes must not be unblocked/prohibited after EPOLLRDHUP, writing is exactly what server
is supposed to do after EPOLLRDHUP (shutdown(SHUT_WR) on client).
If the client does close(fd), then the server receives EPOLLRDHUP | EPOLLHUP | EPOLLERR,
so writes must be unblocked.
So far I do not see where the problem is. Do you use CloseRead/CloseWrite?
The text was updated successfully, but these errors were encountered: