Pass address family when binding to outgoing socket
This commit is contained in:
parent
b106091343
commit
65ef313cc4
11
src/sock.c
11
src/sock.c
@ -39,7 +39,8 @@
|
|||||||
* returned if the bind succeeded. Otherwise, -1 is returned
|
* returned if the bind succeeded. Otherwise, -1 is returned
|
||||||
* to indicate an error.
|
* to indicate an error.
|
||||||
*/
|
*/
|
||||||
static int bind_socket (int sockfd, const char *addr)
|
static int
|
||||||
|
bind_socket (int sockfd, const char *addr, int family)
|
||||||
{
|
{
|
||||||
struct addrinfo hints, *res, *ressave;
|
struct addrinfo hints, *res, *ressave;
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ static int bind_socket (int sockfd, const char *addr)
|
|||||||
assert (addr != NULL && strlen (addr) != 0);
|
assert (addr != NULL && strlen (addr) != 0);
|
||||||
|
|
||||||
memset (&hints, 0, sizeof (struct addrinfo));
|
memset (&hints, 0, sizeof (struct addrinfo));
|
||||||
hints.ai_family = AF_UNSPEC;
|
hints.ai_family = family;
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
|
||||||
/* The local port it not important */
|
/* The local port it not important */
|
||||||
@ -105,12 +106,14 @@ int opensock (const char *host, int port, const char *bind_to)
|
|||||||
|
|
||||||
/* Bind to the specified address */
|
/* Bind to the specified address */
|
||||||
if (bind_to) {
|
if (bind_to) {
|
||||||
if (bind_socket (sockfd, bind_to) < 0) {
|
if (bind_socket (sockfd, bind_to,
|
||||||
|
res->ai_family) < 0) {
|
||||||
close (sockfd);
|
close (sockfd);
|
||||||
continue; /* can't bind, so try again */
|
continue; /* can't bind, so try again */
|
||||||
}
|
}
|
||||||
} else if (config.bind_address) {
|
} else if (config.bind_address) {
|
||||||
if (bind_socket (sockfd, config.bind_address) < 0) {
|
if (bind_socket (sockfd, config.bind_address,
|
||||||
|
res->ai_family) < 0) {
|
||||||
close (sockfd);
|
close (sockfd);
|
||||||
continue; /* can't bind, so try again */
|
continue; /* can't bind, so try again */
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user