Skip to content

runtime: sockets closed by remote peer may remain undetected by poller #6753

@remyoudompheng

Description

@remyoudompheng
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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions