...
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.