Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Impossible to handle server errors like 'EADDRINUSE' without 'domain' #164

@Skywalker13

Description

@Skywalker13

Hi,

In sock.js https://github.com/tj/axon/blob/master/lib/sockets/sock.js#L368 , the 'error' event of this.server is not handled then it's not possible to handle the EADDRINUSE error for example (when binding on a non-free port).

I'm doing ugly thing with domain like this:

    this._host = host;
    this._port = parseInt (port);

    /* Create domain in order to catch port binding errors. */
    const domain = require ('domain').create ();

    domain.on ('error', err => {
      this._log.warn (
        'bus binding on %s:%d, error: %s',
        this._host,
        this._port,
        err.message
      );

      if (err.code === 'EADDRINUSE') {
        this._port++;
        this._log.warn (`address in use, retrying on port ${this._port}`);

        setTimeout (() => {
          this._bind (callback);
        }, 0);
        return;
      }

      this._log.err ('this exception is fatal, we cannot continue...');
      process.exit (1);
    });

    /* Try binding in domain. */
    domain.run (() => {
      this._bind (callback);
    });

_bind is using axon.socket (mode).bind ()

The 'error' server event should be exposed by the public API.

Regards

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions