... ham_entity_t *ehdl; int status; ehdl = ham_attach("inetd", 0, -1, "/usr/sbin/inetd -D", 0); /* inetd is started, running and monitored now */ ... ... status = ham_detach(ehdl,0); ... ...
Of course the attach and detach needn't necessarily be performed by the same caller:
... ham_entity_t *ehdl; int status; /* starts and begins monitoring inetd */ ehdl = ham_attach("inetd", 0, -1, "/usr/sbin/inetd -D", 0); ... ... /* disconnect from Ham (monitoring still continues) */ exit(0);
And to detach inetd:
... int status; /* stops monitoring inetd. */ status = ham_detach_name(0, "inetd", 0); ... exit(0);
If inetd were already running, say with pid 105328676, then we can write the attach/detach code as follows:
ham_entity_t *ehdl; int status; ehdl = ham_attach("inetd", 0, 105328676, NULL, 0); ... ... status = ham_detach(ehdl,0); /* status = ham_detach_name(0, "inetd",0); */ ... ... exit(0);
For convenience, the ham_attach() and ham_detach() functions connect to a HAM if such a connection doesn't already exist. We do this only to make the use of the functions easier.
The connections to a HAM persist only for the duration of the attach/detach calls; any subsequent requests to the HAM must be preceded by the appropriate ham_connect() calls.
The best way to perform a large sequence of requests to a HAM is to:
This is the most efficient method, because it guarantees that there's always the same connection open to the HAM.