aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2005-09-16 21:30:08 +0000
committerDaniel Stenberg <daniel@haxx.se>2005-09-16 21:30:08 +0000
commite7093b3ca8f54a9d67a078ce37afdc825c86fdf4 (patch)
tree7eceb12a79f2c7f98f920768abc58e334873e6b5 /lib
parentd0a4104c0cb1c8b4c1e02ae314a1ad4831d37d4a (diff)
keep 'socktype' in the connectdata struct and make sure we use that for all
protocol sockets even if the resolved address may say otherwise
Diffstat (limited to 'lib')
-rw-r--r--lib/connect.c12
-rw-r--r--lib/ftp.c2
-rw-r--r--lib/hostip4.c8
-rw-r--r--lib/hostip6.c5
-rw-r--r--lib/hostthre.c10
-rw-r--r--lib/url.c5
-rw-r--r--lib/urldata.h1
7 files changed, 22 insertions, 21 deletions
diff --git a/lib/connect.c b/lib/connect.c
index 5d9cf65ef..23c192c7d 100644
--- a/lib/connect.c
+++ b/lib/connect.c
@@ -631,8 +631,9 @@ singleipconnect(struct connectdata *conn,
int error;
bool conected;
struct SessionHandle *data = conn->data;
- curl_socket_t sockfd = socket(ai->ai_family, ai->ai_socktype,
- ai->ai_protocol);
+ curl_socket_t sockfd;
+
+ sockfd = socket(ai->ai_family, conn->socktype, ai->ai_protocol);
if (sockfd == CURL_SOCKET_BAD)
return CURL_SOCKET_BAD;
@@ -661,12 +662,11 @@ singleipconnect(struct connectdata *conn,
Curl_nonblock(sockfd, TRUE);
/* Connect TCP sockets, bind UDP */
- if(ai->ai_socktype==SOCK_STREAM) {
+ if(conn->socktype == SOCK_STREAM)
rc = connect(sockfd, ai->ai_addr, (socklen_t)ai->ai_addrlen);
- } else {
+ else
rc = 0;
- }
-
+
if(-1 == rc) {
error = Curl_ourerrno();
diff --git a/lib/ftp.c b/lib/ftp.c
index 4dc72a496..5c797b938 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -858,7 +858,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
* Workaround for AIX5 getaddrinfo() problem (it doesn't set ai_socktype):
*/
if (ai->ai_socktype == 0)
- ai->ai_socktype = SOCK_STREAM;
+ ai->ai_socktype = conn->socktype;
portsock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (portsock == CURL_SOCKET_BAD) {
diff --git a/lib/hostip4.c b/lib/hostip4.c
index d9277b960..c7bdb6dc9 100644
--- a/lib/hostip4.c
+++ b/lib/hostip4.c
@@ -423,10 +423,10 @@ Curl_addrinfo *Curl_he2ai(struct hostent *he, int port)
prevai->ai_next = ai;
ai->ai_family = AF_INET; /* we only support this */
- if(port == PORT_TFTP)
- ai->ai_socktype = SOCK_DGRAM;
- else
- ai->ai_socktype = SOCK_STREAM;
+
+ /* we return all names as STREAM, so when using this address for TFTP
+ the type must be ignored and conn->socktype be used instead! */
+ ai->ai_socktype = SOCK_STREAM;
ai->ai_addrlen = sizeof(struct sockaddr_in);
/* make the ai_addr point to the address immediately following this struct
diff --git a/lib/hostip6.c b/lib/hostip6.c
index 4624e00b8..be86a5136 100644
--- a/lib/hostip6.c
+++ b/lib/hostip6.c
@@ -252,10 +252,7 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
memset(&hints, 0, sizeof(hints));
hints.ai_family = pf;
- if(conn->protocol & PROT_TFTP)
- hints.ai_socktype = SOCK_DGRAM;
- else
- hints.ai_socktype = SOCK_STREAM;
+ hints.ai_socktype = conn->socktype;
hints.ai_flags = ai_flags;
snprintf(sbuf, sizeof(sbuf), "%d", port);
diff --git a/lib/hostthre.c b/lib/hostthre.c
index 6b358882f..a1204cf9c 100644
--- a/lib/hostthre.c
+++ b/lib/hostthre.c
@@ -559,7 +559,10 @@ static bool init_resolve_thread (struct connectdata *conn,
*/
thread_and_event[0] = td->thread_hnd;
thread_and_event[1] = td->event_thread_started;
- if (WaitForMultipleObjects(sizeof(thread_and_event) / sizeof(thread_and_event[0]), thread_and_event, FALSE, INFINITE) == WAIT_FAILED) {
+ if (WaitForMultipleObjects(sizeof(thread_and_event) /
+ sizeof(thread_and_event[0]),
+ thread_and_event, FALSE,
+ INFINITE) == WAIT_FAILED) {
/* The resolver thread has been created,
* most probably it works now - ignoring this "minor" error
*/
@@ -804,10 +807,7 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
memset(&hints, 0, sizeof(hints));
hints.ai_family = pf;
- if(conn->protocol & PROT_TFTP)
- hints.ai_socktype = SOCK_DGRAM;
- else
- hints.ai_socktype = SOCK_STREAM;
+ hints.ai_socktype = conn->socktype;
hints.ai_flags = AI_CANONNAME;
itoa(port, sbuf, 10);
diff --git a/lib/url.c b/lib/url.c
index c256cf23f..f84ee3734 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -2729,6 +2729,8 @@ static CURLcode CreateConnection(struct SessionHandle *data,
* Setup internals depending on protocol
*************************************************************/
+ conn->socktype = SOCK_STREAM; /* most of them are TCP streams */
+
if (strequal(conn->protostr, "HTTP")) {
#ifndef CURL_DISABLE_HTTP
conn->port = PORT_HTTP;
@@ -2927,12 +2929,13 @@ static CURLcode CreateConnection(struct SessionHandle *data,
else if (strequal(conn->protostr, "TFTP")) {
#ifndef CURL_DISABLE_TFTP
char *type;
+ conn->socktype = SOCK_DGRAM; /* UDP datagram based */
conn->protocol |= PROT_TFTP;
conn->port = PORT_TFTP;
conn->remote_port = PORT_TFTP;
conn->curl_connect = Curl_tftp_connect;
conn->curl_do = Curl_tftp;
- conn->curl_done = Curl_tftp_done;
+ conn->curl_done = Curl_tftp_done;
/* TFTP URLs support an extension like ";mode=<typecode>" that
* we'll try to get now! */
type=strstr(conn->path, ";mode=");
diff --git a/lib/urldata.h b/lib/urldata.h
index ff0b23a54..87a751f6f 100644
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@ -562,6 +562,7 @@ struct connectdata {
char *ip_addr_str;
char protostr[16]; /* store the protocol string in this buffer */
+ int socktype; /* SOCK_STREAM or SOCK_DGRAM */
struct hostname host;
struct hostname proxy;