74 #ifdef CANT_WRITE_BEFORE_SENDING_FD
79 #define STR(x) vstring_str(x)
81 #define SCACHE_MAX_TRIES 2
85 static void scache_clnt_save_endp(
SCACHE *scache,
int endp_ttl,
86 const char *endp_label,
87 const char *endp_prop,
int fd)
90 const char *myname =
"scache_clnt_save_endp";
97 msg_info(
"%s: endp=%s prop=%s fd=%d",
98 myname, endp_label, endp_prop, fd);
104 msg_panic(
"%s: bad endp_ttl: %d", myname, endp_ttl);
111 for (tries = 0; sp->
auto_clnt != 0; tries++) {
131 if (
msg_verbose || count > 1 || (errno && errno != EPIPE && errno != ENOENT))
132 msg_warn(
"problem talking to service %s: %m",
137 msg_warn(
"%s: descriptor save failed with status %d",
144 msg_warn(
"disabling connection caching");
154 msg_warn(
"%s: close(%d): %m", myname, fd);
159 static int scache_clnt_find_endp(
SCACHE *scache,
const char *endp_label,
163 const char *myname =
"scache_clnt_find_endp";
174 for (tries = 0; sp->
auto_clnt != 0; tries++) {
186 if (
msg_verbose || (errno != EPIPE && errno != ENOENT))
187 msg_warn(
"problem talking to service %s: %m",
190 }
else if (status != 0) {
192 msg_info(
"%s: not found: %s", myname, endp_label);
204 if (
msg_verbose || (errno != EPIPE && errno != ENOENT))
205 msg_warn(
"problem talking to service %s: %m",
209 #ifdef MUST_READ_AFTER_SENDING_FD
216 msg_info(
"%s: endp=%s prop=%s fd=%d",
217 myname, endp_label,
STR(endp_prop), fd);
223 msg_warn(
"disabling connection caching");
236 static void scache_clnt_save_dest(
SCACHE *scache,
int dest_ttl,
237 const char *dest_label,
238 const char *dest_prop,
239 const char *endp_label)
242 const char *myname =
"scache_clnt_save_dest";
248 msg_info(
"%s: dest_label=%s dest_prop=%s endp_label=%s",
249 myname, dest_label, dest_prop, endp_label);
255 msg_panic(
"%s: bad dest_ttl: %d", myname, dest_ttl);
262 for (tries = 0; sp->
auto_clnt != 0; tries++) {
276 if (
msg_verbose || (errno != EPIPE && errno != ENOENT))
277 msg_warn(
"problem talking to service %s: %m",
282 msg_warn(
"%s: destination save failed with status %d",
289 msg_warn(
"disabling connection caching");
301 static int scache_clnt_find_dest(
SCACHE *scache,
const char *dest_label,
306 const char *myname =
"scache_clnt_find_dest";
317 for (tries = 0; sp->
auto_clnt != 0; tries++) {
330 if (
msg_verbose || (errno != EPIPE && errno != ENOENT))
331 msg_warn(
"problem talking to service %s: %m",
334 }
else if (status != 0) {
336 msg_info(
"%s: not found: %s", myname, dest_label);
348 if (
msg_verbose || (errno != EPIPE && errno != ENOENT))
349 msg_warn(
"problem talking to service %s: %m",
353 #ifdef MUST_READ_AFTER_SENDING_FD
360 msg_info(
"%s: dest=%s dest_prop=%s endp_prop=%s fd=%d",
361 myname, dest_label,
STR(dest_prop),
STR(endp_prop), fd);
367 msg_warn(
"disabling connection caching");
390 static void scache_clnt_free(
SCACHE *scache)
396 #ifdef CANT_WRITE_BEFORE_SENDING_FD
405 int idle_limit,
int ttl_limit)
417 service =
concatenate(
"local:private/", server, (
char *) 0);
421 #ifdef CANT_WRITE_BEFORE_SENDING_FD
VSTREAM * auto_clnt_access(AUTO_CLNT *auto_clnt)
#define SCACHE_REQ_SAVE_DEST
void(* size)(struct SCACHE *, SCACHE_SIZE *)
NORETURN msg_panic(const char *fmt,...)
#define RECV_ATTR_INT(name, val)
SCACHE_FIND_DEST_FN find_dest
#define SCACHE_REQ_FIND_ENDP
#define CANT_WRITE_BEFORE_SENDING_FD
AUTO_CLNT * auto_clnt_create(const char *service, int timeout, int max_idle, int max_ttl)
#define read_wait(fd, timeout)
void msg_warn(const char *fmt,...)
VSTRING * vstring_alloc(ssize_t len)
#define SCACHE_REQ_FIND_DEST
SCACHE_SAVE_ENDP_FN save_endp
#define SEND_ATTR_INT(name, val)
#define SCACHE_REQ_SAVE_ENDP
void auto_clnt_free(AUTO_CLNT *auto_clnt)
SCACHE * scache_clnt_create(const char *server, int timeout, int idle_limit, int ttl_limit)
SCACHE_SAVE_DEST_FN save_dest
int vstream_fflush(VSTREAM *stream)
char * concatenate(const char *arg0,...)
SCACHE_FIND_ENDP_FN find_endp
void auto_clnt_recover(AUTO_CLNT *auto_clnt)
VSTRING * vstring_free(VSTRING *vp)
#define vstream_fileno(vp)
void(* free)(struct SCACHE *)
#define SEND_ATTR_STR(name, val)
#define RECV_ATTR_STR(name, val)
void * mymalloc(ssize_t len)
void msg_info(const char *fmt,...)