Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Premature close error on socket under Node.js 12 #477

Open
vweevers opened this issue Jul 2, 2022 · 2 comments
Open

Premature close error on socket under Node.js 12 #477

vweevers opened this issue Jul 2, 2022 · 2 comments

Comments

@vweevers
Copy link
Contributor

vweevers commented Jul 2, 2022

This only happens with readable-stream@4 and Node.js 12. Later versions of Node, or earlier versions of readable-stream, work fine.

'use strict'

const net = require('net')
const { pipeline, PassThrough } = require('readable-stream')

const server = net.createServer(function (sock) {
  pipeline(sock, new PassThrough(), sock, function () { })
})

server.listen(3000, function () {
  const sock = net.connect(3000)

  // Change to false to avoid error
  if (true) {
    pipeline(sock, new PassThrough(), sock, (err) => {
      // NodeError: Premature close
      if (err) throw err
    })
  } else {
    sock.on('connect', function () {
      console.log('client connected')

      pipeline(sock, new PassThrough(), sock, (err) => {
        if (err) throw err
      })
    })
  }
})
@vweevers
Copy link
Contributor Author

vweevers commented Jul 2, 2022

Happens because sock.readable is initially false (before connect has been emitted) and this branch is hit:

} else if (
!writable &&
(!willEmitClose || isWritable(stream)) &&
(readableFinished || isReadable(stream) === false)
) {
process.nextTick(onclose)

Which evaluates to:

if (
  !false &&
  (!false || true) &&
  (false || false === false)
) {
  process.nextTick(onclose)
}

@mcollina
Copy link
Member

mcollina commented Jul 2, 2022

I'm not sure what can we do about this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants