if (listener->state != LI_ASSIGNED)
return ERR_NONE; /* already bound */
- err = sockpair_bind_receiver(&listener->rx, listener->rx.proto->accept, &msg);
- if (err != ERR_NONE) {
- snprintf(errmsg, errlen, "%s", msg);
- free(msg); msg = NULL;
- return err;
+ if (!(listener->rx.flags & RX_F_BOUND)) {
+ msg = "receiving socket not bound";
+ goto err_return;
}
+
listener->state = LI_LISTEN;
return err;
socklen_t ready_len;
char *msg = NULL;
+ err = ERR_NONE;
+
/* ensure we never return garbage */
if (errlen)
*errmsg = 0;
if (listener->state != LI_ASSIGNED)
return ERR_NONE; /* already bound */
- err = sock_inet_bind_receiver(&listener->rx, listener->rx.proto->accept, &msg);
- if (err != ERR_NONE) {
- snprintf(errmsg, errlen, "%s", msg);
- free(msg); msg = NULL;
- return err;
+ if (!(listener->rx.flags & RX_F_BOUND)) {
+ msg = "receiving socket not bound";
+ goto tcp_return;
}
fd = listener->rx.fd;
tcp_close_return:
close(fd);
+ tcp_return:
if (msg && errlen) {
char pn[INET6_ADDRSTRLEN];
int udp_bind_listener(struct listener *listener, char *errmsg, int errlen)
{
int err = ERR_NONE;
- void *handler = NULL;
char *msg = NULL;
/* ensure we never return garbage */
if (listener->state != LI_ASSIGNED)
return ERR_NONE; /* already bound */
- switch (listener->bind_conf->frontend->mode) {
- case PR_MODE_SYSLOG:
- handler = syslog_fd_handler;
- break;
- default:
- err |= ERR_FATAL | ERR_ALERT;
- msg = "UDP is not yet supported on this proxy mode";
+ if (!(listener->rx.flags & RX_F_BOUND)) {
+ msg = "receiving socket not bound";
goto udp_return;
}
- err = sock_inet_bind_receiver(&listener->rx, handler, &msg);
-
- if (err != ERR_NONE) {
- snprintf(errmsg, errlen, "%s", msg);
- free(msg); msg = NULL;
- return err;
- }
listener->state = LI_LISTEN;
udp_return:
if (listener->state != LI_ASSIGNED)
return ERR_NONE; /* already bound */
- err = sock_unix_bind_receiver(&listener->rx, listener->rx.proto->accept, &msg);
- if (err != ERR_NONE) {
- snprintf(errmsg, errlen, "%s", msg);
- free(msg); msg = NULL;
- return err;
+ if (!(listener->rx.flags & RX_F_BOUND)) {
+ msg = "receiving socket not bound";
+ goto uxst_return;
}
fd = listener->rx.fd;
uxst_close_return:
close(fd);
+ uxst_return:
if (msg && errlen) {
const char *path = ((struct sockaddr_un *)&listener->rx.addr)->sun_path;
snprintf(errmsg, errlen, "%s [%s]", msg, path);