This is legal behavior, and if it confuses some other code, that code is broken. See section 8.1.4.4 of the HTTP 1.1 specification: "A client, server, or proxy MAY close the transport connection at any time. ... This means that clients, servers, and proxies MUST be able to recover from asynchronous close events."
That said, the bitcoin client hopelessly bungles persistent and concurrent connections. A fix for this is one of the fixes in my '3diff' patch set.
http://davids.webmaster.com/~davids/bitcoin-3diff.txt