1 // socket_connect46select.c
2 // masashi shimakura 20140223
6 #include<netinet/in_systm.h>
21 // int socket_connect46(struct addrinfo * hints, char * ip, char * port, int * sk);
24 int socket_connect46select(struct addrinfo * hints, char * ip, char * port, int * sk, int interval)
27 struct addrinfo *res, *res0;
29 char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
33 hints->ai_socktype = SOCK_STREAM;
34 // hints->ai_socktype = SOCK_DGRAM; /* Datagram socket */
35 hints->ai_flags = AI_PASSIVE; /* For wildcard IP address */
36 hints->ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */
37 hints->ai_protocol = 0; /* Any protocol */
38 hints->ai_canonname = NULL;
39 hints->ai_addr = NULL;
40 hints->ai_next = NULL;
42 error = getaddrinfo(ip, port, hints, &res0);
44 fprintf(stderr, "ERR: %s %s: %s\n", ip, port, gai_strerror(error));
48 for(res = res0; res; res = res->ai_next){
49 error = getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf), sbuf, sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV);
51 fprintf(stderr,"ERR: %s %s: %s\n", ip, port, gai_strerror(error));
55 // fprintf(stderr,"trying %s port %s\n", hbuf, sbuf);
57 * sk = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
59 fprintf(stderr,"ERR: %d\n", * sk);
63 // FreeBSDにて問題があり、現在は検証中です、
64 // if((ret = connect(* sk, res->ai_addr, res->ai_addrlen)) < 0){
65 // if((ret = select_connect(sk, res->ai_addr, res->ai_addrlen, interval)) < 0){
66 if((ret = select_connect(sk, (struct sockaddr_in *)res->ai_addr, interval)) < 0){
76 fprintf(stderr,"ERR: test: no destination to connect to\n");