| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /* include tcp_connect */
- #include "unp.h"
- int
- tcp_connect(const char *host, const char *serv)
- {
- int sockfd, n;
- struct addrinfo hints, *res, *ressave;
- bzero(&hints, sizeof(struct addrinfo));
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
- if ( (n = getaddrinfo(host, serv, &hints, &res)) != 0)
- err_quit("tcp_connect error for %s, %s: %s",
- host, serv, gai_strerror(n));
- ressave = res;
- do {
- sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
- if (sockfd < 0)
- continue; /* ignore this one */
- if (connect(sockfd, res->ai_addr, res->ai_addrlen) == 0)
- break; /* success */
- Close(sockfd); /* ignore this one */
- } while ( (res = res->ai_next) != NULL);
- if (res == NULL) /* errno set from final connect() */
- err_sys("tcp_connect error for %s, %s", host, serv);
- freeaddrinfo(ressave);
- return(sockfd);
- }
- /* end tcp_connect */
- /*
- * We place the wrapper function here, not in wraplib.c, because some
- * XTI programs need to include wraplib.c, and it also defines
- * a Tcp_connect() function.
- */
- int
- Tcp_connect(const char *host, const char *serv)
- {
- return(tcp_connect(host, serv));
- }
|