#include <sys/socket.h>
#include <sys/types.h> 
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h> 
#include <net/if.h>
 
int main(int argc,char *argv[])
{
	char *host;
	int port;
	struct addrinfo hints;
	struct addrinfo *result;
	int sockfd=0;
	struct protoent *protocol;
	struct ifreq ifr;
	int err;
	
	if (argc!=3)
		return 1;
	
	host=argv[1];
	sscanf(argv[2],"%d",&port);
	
	protocol=getprotobyname("tcp");
	
	memset(&result, 0, sizeof(result));
	memset(&hints, 0, sizeof(hints));
	memset(&ifr,0,sizeof(ifr));
	hints.ai_family = AF_UNSPEC;    /* Allow IPv4 or IPv6 */
	hints.ai_socktype = SOCK_STREAM; /* Datagram socket */
	hints.ai_flags = 0;    /* For wildcard IP address */
	hints.ai_protocol = protocol->p_proto;          /* Any protocol */

	err=getaddrinfo(host, NULL, &hints, &result);
	if (err==0)
	{
		sockfd=socket(result->ai_family, result->ai_socktype, result->ai_protocol);
		if (-1!=sockfd)
		{
			strcpy(ifr.ifr_name,"eth0");
			err=ioctl(sockfd,SIOCGIFINDEX,&ifr);
			
			printf("Index %d\n",ifr.ifr_ifindex);
			((struct sockaddr_in6 *)(result->ai_addr))->sin6_scope_id=ifr.ifr_ifindex;
			((struct sockaddr_in6 *)(result->ai_addr))->sin6_port=htons(port);
			err=connect(sockfd,result->ai_addr,result->ai_addrlen);
			if (-1==err)
				perror("connect()");
			else
				printf("connected\n");
			close(sockfd);
		}
	}

	return 0;
}
