- family = in->ai_family;
- socktype = in->ai_socktype;
- addr = in->ai_addr;
- addrlen = in->ai_addrlen;
- freeaddrinfo (in);
-#else
- memset (&sin, 0, sizeof (sin));
- host = gethostbyname (hostname);
- if (!host)
- return -1;
- memcpy (&sin.sin_addr, host->h_addr, host->h_length);
- serv = getservbyname (service, proto->p_name);
- if (serv)
- sin.sin_port = htons (serv->s_port);
- else if (isdigit (service[0]))
- sin.sin_port = htons (atoi (service));
- family = sin.sin_family = AF_INET;
- socktype = SOCK_STREAM;
- addr = (struct sockaddr *)&sin;
- addrlen = sizeof (sin);
-#endif
-
- server = socket (family, socktype, 0);
- if (server == -1)
- return -1;
+ for (in = in0; in; in = in->ai_next)
+ {
+ server = socket (in->ai_family, in->ai_socktype, in->ai_protocol);
+ if (server < 0)
+ continue;
+ if (connect (server, in->ai_addr, in->ai_addrlen) < 0)
+ {
+ server = -1;
+ continue;
+ }
+ break;
+ }