126 static void auto_clnt_close(
AUTO_CLNT *);
130 static void auto_clnt_event(
int unused_event,
void *context)
139 msg_panic(
"auto_clnt_event: stream is closed");
141 auto_clnt_close(auto_clnt);
146 static void auto_clnt_ttl_event(
int event,
void *context)
161 auto_clnt_event(event, context);
166 static void auto_clnt_open(
AUTO_CLNT *auto_clnt)
168 const char *myname =
"auto_clnt_open";
175 msg_panic(
"auto_clnt_open: stream is open");
214 static void auto_clnt_close(
AUTO_CLNT *auto_clnt)
216 const char *myname =
"auto_clnt_close";
222 msg_panic(
"%s: stream is closed", myname);
228 msg_info(
"%s: disconnect %s stream",
246 auto_clnt_close(auto_clnt);
260 auto_clnt_open(auto_clnt);
272 int max_idle,
int max_ttl)
274 const char *myname =
"auto_clnt_create";
275 char *transport =
mystrdup(service);
282 if ((endpoint =
split_at(transport,
':')) == 0
283 || *endpoint == 0 || *transport == 0)
284 msg_fatal(
"need service transport:endpoint instead of \"%s\"", service);
286 msg_info(
"%s: transport=%s endpoint=%s", myname, transport, endpoint);
293 if (strcmp(transport,
"inet") == 0) {
295 }
else if (strcmp(transport,
"local") == 0) {
297 }
else if (strcmp(transport,
"unix") == 0) {
300 msg_fatal(
"invalid transport name: %s in service: %s",
319 auto_clnt_close(auto_clnt);
321 myfree((
void *) auto_clnt);
void event_enable_read(int fd, EVENT_NOTIFY_RDWR_FN callback, void *context)
VSTREAM * auto_clnt_access(AUTO_CLNT *auto_clnt)
#define CA_VSTREAM_CTL_TIMEOUT(v)
char * mystrdup(const char *str)
const char * auto_clnt_name(AUTO_CLNT *auto_clnt)
NORETURN msg_panic(const char *fmt,...)
int(* connect)(const char *, int, int)
int inet_connect(const char *, int, int)
AUTO_CLNT * auto_clnt_create(const char *service, int timeout, int max_idle, int max_ttl)
int vstream_fclose(VSTREAM *stream)
int unix_connect(const char *, int, int)
void msg_warn(const char *fmt,...)
void auto_clnt_free(AUTO_CLNT *auto_clnt)
NORETURN msg_fatal(const char *fmt,...)
void auto_clnt_recover(AUTO_CLNT *auto_clnt)
time_t event_request_timer(EVENT_NOTIFY_TIME_FN callback, void *context, int delay)
char * split_at(char *string, int delimiter)
#define vstream_fileno(vp)
#define CA_VSTREAM_CTL_END
#define CA_VSTREAM_CTL_PATH(v)
void vstream_control(VSTREAM *stream, int name,...)
void event_disable_readwrite(int fd)
int event_cancel_timer(EVENT_NOTIFY_TIME_FN callback, void *context)
int close_on_exec(int fd, int on)
VSTREAM * vstream_fdopen(int fd, int flags)
void * mymalloc(ssize_t len)
void msg_info(const char *fmt,...)