http: do not emit EOF non-readable socket
authorFedor Indutny <fedor.indutny@gmail.com>
Fri, 24 Jan 2014 12:25:11 +0000 (16:25 +0400)
committerFedor Indutny <fedor@indutny.com>
Mon, 7 Apr 2014 20:40:22 +0000 (00:40 +0400)
commitf2b297cc7ca1a7a4f4abd356bd1ad0af09e1b26b
tree512c383d977a108dc9c132e03a0fbc54fb099e63
parentc2d32f4c0e60a31e6ee421f8f7f45541792c5c6d
http: do not emit EOF non-readable socket

Socket may become not `readable`, but http should not rely on this
property and should not think that it means that no data will ever
arrive from it. In fact, it may arrive in a next tick and, since
`this.push(null)` was already called, it will result in a error like
this:

    Error: stream.push() after EOF
        at readableAddChunk (_stream_readable.js:143:15)
        at IncomingMessage.Readable.push (_stream_readable.js:123:10)
        at HTTPParser.parserOnBody (_http_common.js:132:22)
        at Socket.socketOnData (_http_client.js:277:20)
        at Socket.EventEmitter.emit (events.js:101:17)
        at Socket.Readable.read (_stream_readable.js:367:10)
        at Socket.socketCloseListener (_http_client.js:196:10)
        at Socket.EventEmitter.emit (events.js:123:20)
        at TCP.close (net.js:479:12)

fix #6784
lib/http.js
test/simple/test-http-client-readable.js [new file with mode: 0644]