diff options
author | Tim Ruehsen <tim.ruehsen@gmx.de> | 2016-07-25 13:04:11 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2016-07-26 14:23:55 +0200 |
commit | e9b7e84870bc1bfea4969a57d15e523133b46ecb (patch) | |
tree | 5a4fdd04b3dcb311ffebf2292a9ac9c405c28c47 /src/socket.c | |
parent | 0f67ccecddbe6533b51e74c955a4629654e79ae3 (diff) | |
download | gnutls-e9b7e84870bc1bfea4969a57d15e523133b46ecb.tar.gz |
gnutls-cli: added example usage of TCP fastopen
It is enabled with the new --fastopen option.
Diffstat (limited to 'src/socket.c')
-rw-r--r-- | src/socket.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/socket.c b/src/socket.c index bbb97f1fd4..35fd61534e 100644 --- a/src/socket.c +++ b/src/socket.c @@ -318,6 +318,7 @@ void socket_bye(socket_st * socket) freeaddrinfo(socket->addr_info); socket->addr_info = socket->ptr = NULL; + socket->connect_addrlen = 0; free(socket->ip); free(socket->hostname); @@ -353,10 +354,12 @@ void canonicalize_host(char *hostname, char *service, unsigned service_size) void socket_open(socket_st * hd, const char *hostname, const char *service, - int udp, const char *msg) + int flags, const char *msg) { struct addrinfo hints, *res, *ptr; int sd, err = 0; + int udp = flags & 1; + int fastopen = flags & 2; char buffer[MAX_BUF + 1]; char portname[16] = { 0 }; char *a_hostname = (char*)hostname; @@ -416,14 +419,21 @@ socket_open(socket_st * hd, const char *hostname, const char *service, #endif } + if (fastopen && ptr->ai_socktype == SOCK_STREAM + && (ptr->ai_family == AF_INET || ptr->ai_family == AF_INET6)) { + memcpy(&hd->connect_addr, ptr->ai_addr, ptr->ai_addrlen); + hd->connect_addrlen = ptr->ai_addrlen; - if (msg) - printf("%s '%s:%s'...\n", msg, buffer, portname); + if (msg) + printf("%s '%s:%s' (TFO)...\n", msg, buffer, portname); + } else { + if (msg) + printf("%s '%s:%s'...\n", msg, buffer, portname); - err = connect(sd, ptr->ai_addr, ptr->ai_addrlen); - if (err < 0) { - continue; + if ((err = connect(sd, ptr->ai_addr, ptr->ai_addrlen)) < 0) + continue; } + break; } |