zeromq.js icon indicating copy to clipboard operation
zeromq.js copied to clipboard

Subscriber socket never times out

Open HappyCerberus opened this issue 4 years ago • 1 comments

Describe the bug Connection is pending forever for subscriber sockets.

Reproducing

import * as zmq from "zeromq"

async function run() {
    const sub = new zmq.Subscriber;
    sub.connectTimeout = 200;
    sub.connect("tcp://127.0.0.1:3000"); // there is no publisher running on this port
    sub.subscribe();

    for await (const [topic, msg] of sub) {
        console.log(`Got message`);
    }
}

run().catch(err => {
    console.error(err)
    process.exit(1)
})

Expected behavior Connection should time out / generate an error.

Tested on

  • OS: OpenSuSe Tumbleweed
  • ZeroMQ.js version: 6.0.0-beta.6

HappyCerberus avatar Oct 03 '20 14:10 HappyCerberus

Implementing this missing functionality like this for now, since there doesn't seem to be support for the connection timeout

await new Promise((resolve, reject) => {
    let timeout: NodeJS.Timeout | null = null

    const listner = () => {
        if (timeout) {
            clearTimeout(timeout)
        }
        socket.events.off("connect", listner)
        resolve(null)
    }

    socket.events.on("connect", listner)

    timeout = setTimeout(() => {
        reject(new Error("connect timeout"))
        socket.events.off("connect", listner)
    }, 5000)
})

devidw avatar Oct 16 '23 16:10 devidw