aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/connect.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/connect.c b/lib/connect.c
index e6bfbdae9..9c140c9f9 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -216,7 +216,7 @@ static CURLcode bindlocal(struct connectdata *conn,
int sockfd)
{
#ifdef HAVE_INET_NTOA
-
+ bool bindworked = FALSE;
struct SessionHandle *data = conn->data;
/*************************************************************
@@ -284,6 +284,8 @@ static CURLcode bindlocal(struct connectdata *conn,
if( bind(sockfd, addr->ai_addr, addr->ai_addrlen) >= 0) {
/* we succeeded to bind */
struct sockaddr_in6 add;
+
+ bindworked = TRUE;
size = sizeof(add);
if(getsockname(sockfd, (struct sockaddr *) &add,
@@ -306,6 +308,8 @@ static CURLcode bindlocal(struct connectdata *conn,
/* we succeeded to bind */
struct sockaddr_in add;
+ bindworked = TRUE;
+
size = sizeof(add);
if(getsockname(sockfd, (struct sockaddr *) &add,
(socklen_t *)&size)<0) {
@@ -315,7 +319,7 @@ static CURLcode bindlocal(struct connectdata *conn,
}
}
#endif
- else {
+ if(!bindworked) {
switch(errno) {
case EBADF:
failf(data, "Invalid descriptor: %d", errno);