lib/server.js
function RpcServer(opts) {
    assert.object(opts, 'options');
    assert.object(opts.log, 'options.log');
    assert.number(opts.program, 'options.program');

    var v = opts.version;
    if (typeof (v) === 'number')
        v = [v];

    assert.arrayOfNumber(v, 'options.version');

    net.Server.call(this, opts);

    this.log = opts.log.child({
        component: 'RpcServer'
    }, true);
    this.name = opts.name || 'RpcServer';
    this.program = opts.program;
    this.rpc_table = {};
    this.saved_handlers = [];
    this.version = v.slice();

    this.on('connection', onConnection.bind(this));
}
function RpcServer(opts) {
    assert.object(opts, 'options');
    assert.object(opts.log, 'options.log');
    assert.number(opts.program, 'options.program');

    var v = opts.version;
    if (typeof (v) === 'number')
        v = [v];

    assert.arrayOfNumber(v, 'options.version');

    net.Server.call(this, opts);

    this.log = opts.log.child({
        component: 'RpcServer'
    }, true);
    this.name = opts.name || 'RpcServer';
    this.program = opts.program;
    this.rpc_table = {};
    this.saved_handlers = [];
    this.version = v.slice();

    this.on('connection', onConnection.bind(this));
}
An RPC service is identified by its RPC program number, version number, and the transport address where it may be reached.  The transport address, in turn, consists of a network address and a transport selector.  In the case of a service available over TCP/IP or UDP/IP, the network address will be an IP address, and the transport selector will be a TCP or UDP port number.