libdill: Structured Concurrency for C


ipaddr_remote - resolve the address of a remote IP endpoint


#include <libdill.h>

int ipaddr_remote(
    struct ipaddr* addr,
    const char* name,
    int port,
    int mode,
    int64_t deadline);


Converts an IP address in human-readable format, or a name of a remote host into an ipaddr structure.

Mode specifies which kind of addresses should be returned. Possible values are:

Setting the argument to zero invokes default behaviour, which, at the present, is IPADDR_PREF_IPV4. However, in the future when IPv6 becomes more common it may be switched to IPADDR_PREF_IPV6.

addr: Out parameter, The IP address object.

name: Name of the remote IP endpoint, such as "" or "".

port: Port number. Valid values are 1-65535.

mode: What kind of address to return. See above.

deadline: A point in time when the operation should time out, in milliseconds. Use the now function to get your current point in time. 0 means immediate timeout, i.e., perform the operation if possible or return without blocking if not. -1 means no deadline, i.e., the call will block forever if the operation cannot be performed.

This function is not available if libdill is compiled with --disable-sockets option.


In case of success the function returns 0. In case of error it returns -1 and sets errno to one of the values below.



ipaddr addr;
ipaddr_remote(&addr, "", 80, 0, -1);
int s = socket(ipaddr_family(addr), SOCK_STREAM, 0);
connect(s, ipaddr_sockaddr(&addr), ipaddr_len(&addr));


ipaddr_equal(3) ipaddr_family(3) ipaddr_len(3) ipaddr_local(3) ipaddr_port(3) ipaddr_remotes(3) ipaddr_setport(3) ipaddr_sockaddr(3) ipaddr_str(3) now(3)