new object $daemon: $network;
var $daemon connection = 0;
var $daemon default_port = 9000;
var $daemon current_port = 0;
var $daemon next_connection = 0;
var $daemon port = 0;
var $root inited = 1;
driver method .connect() {
arg remote, local, port;
var new;
// An incoming connection was received. Spawn off a new $connection
// and pass off to it.
new = connection.new(local, remote, port);
reassign_connection(new);
};
public method .port() {
return current_port;
};
public method .shutdown() {
arg [args];
(> .stop_listening() <);
connection.daemon_shutdown();
};
public method .start_listening() {
arg [port];
(| .stop_listening() |);
current_port = [@port, default_port][1];
(> bind_port(current_port) <);
.log("** Starting " + .objname() + " on port " + current_port + " **");
};
public method .startup() {
arg [args];
var opt;
if (caller() != $sys) {
throw(~perm, "Caller is not $sys");
}
catch any {
(> .start_listening() <);
} with {
switch (error()) {
case ~bind:
.log(("** Unable to bind to port " + tostr(port)) + "! **");
default:
.log($parse_lib.traceback(traceback()));
}
}
};
public method .stop_listening() {
arg [port];
unbind_port(current_port);
};