Both sides of a TCP connection have to agree to shut down that connection for it to close gracefully. What's happening in our case is the client asks for a disconnect after a timeout, but the server never agrees to that disconnect. The client does force a close of its socket after 60s, but we need to clean up the server-side socket manually. We're using this "Connection: close" header only because the http.Server code is managing our sockets for us. We aren't actually sending any data back to the client with this call, it's just how we we are required to force a close.