116 #define ATTR_CLNT_DEF_REQ_LIMIT (0)
117 #define ATTR_CLNT_DEF_TRY_LIMIT (2)
118 #define ATTR_CLNT_DEF_TRY_DELAY (1)
131 int max_idle,
int max_ttl)
150 const char *myname =
"attr_clnt_request";
167 #define SKIP_ARG(ap, type) { \
168 (void) va_arg(ap, char *); \
169 (void) va_arg(ap, type); \
171 #define SKIP_ARG2(ap, t1, t2) { \
173 (void) va_arg(ap, t2); \
177 va_start(saved_ap, send_flags);
184 err = (client->
print(stream, send_flags, ap) != 0
204 (void) va_arg(ap,
HTABLE *);
207 msg_panic(
"%s: unexpected attribute type %d",
211 recv_flags = va_arg(ap,
int);
212 ret = client->
scan(stream, recv_flags, ap);
227 || (errno && errno != EPIPE && errno != ENOENT && errno != ECONNRESET))
228 msg_warn(
"problem talking to server %s: %m",
248 const char *myname =
"attr_clnt_control";
263 msg_info(
"%s: new request limit %d",
281 msg_panic(
"%s: bad name %d", myname, name);
#define ATTR_CLNT_CTL_TRY_LIMIT
VSTREAM * auto_clnt_access(AUTO_CLNT *auto_clnt)
#define ATTR_CLNT_CTL_PROTO
void attr_clnt_free(ATTR_CLNT *client)
const char * auto_clnt_name(AUTO_CLNT *auto_clnt)
NORETURN msg_panic(const char *fmt,...)
#define ATTR_CLNT_CTL_END
int(* ATTR_CLNT_PRINT_FN)(VSTREAM *, int, va_list)
int WARN_UNUSED_RESULT attr_vscan_plain(VSTREAM *, int, va_list)
#define VA_COPY(dest, src)
#define ATTR_CLNT_DEF_REQ_LIMIT
ATTR_CLNT * attr_clnt_create(const char *service, int timeout, int max_idle, int max_ttl)
#define ATTR_CLNT_DEF_TRY_LIMIT
void attr_clnt_control(ATTR_CLNT *client, int name,...)
#define ATTR_CLNT_CTL_TRY_DELAY
AUTO_CLNT * auto_clnt_create(const char *service, int timeout, int max_idle, int max_ttl)
#define ATTR_CLNT_CTL_REQ_LIMIT
void msg_warn(const char *fmt,...)
#define ATTR_CLNT_DEF_TRY_DELAY
int(* ATTR_CLNT_SCAN_FN)(VSTREAM *, int, va_list)
void auto_clnt_free(AUTO_CLNT *auto_clnt)
int vstream_fflush(VSTREAM *stream)
#define SKIP_ARG(ap, type)
int attr_clnt_request(ATTR_CLNT *client, int send_flags,...)
void auto_clnt_recover(AUTO_CLNT *auto_clnt)
#define SKIP_ARG2(ap, t1, t2)
#define vstream_fileno(vp)
int attr_vprint_plain(VSTREAM *, int, va_list)
void * mymalloc(ssize_t len)
void msg_info(const char *fmt,...)