Commit dc80d950 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Add VTCP_listen_on() which resolves and listens on an address

parent 20ef818a
......@@ -58,5 +58,7 @@ int VTCP_open(const char *addr, const char *def_port, double timeout,
void VTCP_close(int *s);
int VTCP_bind(const struct suckaddr *addr, const char **errp);
int VTCP_listen(const struct suckaddr *addr, int depth, const char **errp);
int VTCP_listen_on(const char *addr, const char *def_port, int depth,
const char **errp);
void VTCP_set_read_timeout(int s, double seconds);
// #endif
......@@ -445,6 +445,44 @@ VTCP_listen(const struct suckaddr *sa, int depth, const char **errp)
return (sd);
}
/*--------------------------------------------------------------------*/
struct helper {
int depth;
const char **errp;
};
static int __match_proto__(vss_resolved_f)
vtcp_lo_cb(void *priv, const struct suckaddr *sa)
{
int sock;
struct helper *hp = priv;
sock = VTCP_listen(sa, hp->depth, hp->errp);
if (sock > 0) {
*hp->errp = NULL;
return (sock);
}
AN(*hp->errp);
return (0);
}
int
VTCP_listen_on(const char *addr, const char *def_port, int depth,
const char **errp)
{
struct helper h;
int sock;
h.depth = depth;
h.errp = errp;
sock = VSS_resolver(addr, def_port, vtcp_lo_cb, &h, errp);
if (*errp != NULL)
return (-1);
return(sock);
}
/*--------------------------------------------------------------------
* Set or reset SO_LINGER flag
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment