diff options
author | Alon Levy <alevy@redhat.com> | 2010-09-19 13:51:46 +0200 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2010-09-19 13:51:46 +0200 |
commit | b1a3c160735ccbf0ba5539e957d400660ebb6ec3 (patch) | |
tree | f056dfb965258c38511e440df2e02a95e160675b | |
parent | fb73133fa9af0aee278d3bcaeb46fa72855f0c72 (diff) |
vssclient: use getaddrinfo
-rw-r--r-- | vscclient.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/vscclient.c b/vscclient.c index 16eb6f0..40ad64d 100644 --- a/vscclient.c +++ b/vscclient.c @@ -6,6 +6,7 @@ #include <sys/types.h> #include <sys/socket.h> +#include <netdb.h> #include <netinet/in.h> #include "vscard_common.h" @@ -181,7 +182,8 @@ main ( int argc, char *argv[] ) { - struct sockaddr_in servaddr; + struct addrinfo hints; + struct addrinfo* server; VSCMsgHeader mhHeader; @@ -198,6 +200,7 @@ main ( char* cert_names[MAX_CERTS]; int cert_count = 0; int c; + int ret; VirtualReaderOptions command_line_readers[] = { { @@ -240,16 +243,23 @@ main ( printf ("Error opening socket!\n"); } - memset (&servaddr, 0, sizeof (struct sockaddr_in)); - servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr = inet_addr (argv[argc - 2]); - servaddr.sin_port = htons (atoi(argv[argc - 1])); + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = 0; + hints.ai_protocol = 0; /* Any protocol */ - if ( - connect ( + ret = getaddrinfo(argv[argc - 2], argv[argc - 1], &hints, &server); + + if (ret != 0) { + printf ("getaddrinfo failed\n"); + return (5); + } + + if (connect ( sock, - (struct sockaddr *)&servaddr, - sizeof(servaddr) + server->ai_addr, + server->ai_addrlen ) < 0 ) { // Error |