| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 
 |  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <errno.h>
 
 
#define PORT	4000
//#define	IP_LO			"::1"
//#define	IP_SERV 		"fe80::2c0:caff:fe32:3de5"
 
 
int main()
{
	char ip[50];
	char HostName[100];
 
	struct sockaddr_in6 from;
	struct sockaddr_in6 server;
	struct addrinfo hints, *res;
	struct sockaddr_in6 *extract;
 
	int sockS=0, sockC=0;
	int ecode=0;
	socklen_t len =  sizeof(server);
	void *addr = NULL;
 
 
	memset( &ip, 0, sizeof(ip) );
	memset( &hints, 0, sizeof hints );
	memset( &HostName, 0, sizeof(HostName) ); 
	memset( &from, 0, sizeof(struct sockaddr_in6) );
	memset( &server, 0, sizeof(struct sockaddr_in6) );	
 
			// récupére l'IP de la machine
	if(gethostname( HostName, sizeof(HostName) ) == -1)
	{
		perror("gethostname");
		exit(1);
	}
 
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_family = PF_INET6;
 
        if((ecode = getaddrinfo(HostName, NULL, &hints, &res)) != 0) 
	{
		fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ecode));
		exit(1);
        }
 
	extract = (struct sockaddr_in6 *)res->ai_addr; 
	addr = &(extract->sin6_addr);
 
	inet_ntop(PF_INET6, addr, ip, sizeof(ip));
 
 
			/*	remplie la structure du server	*/
	server.sin6_family = PF_INET6;
	server.sin6_port = htons(PORT);
	server.sin6_flowinfo = 0;
 
	if( (ecode = inet_pton(PF_INET6, ip, &(server.sin6_addr))) == 1 )
	{
		puts(" :: IP OK ::");
	}
	else
	{
		puts(" :: Invalid Adresse or Adresse family ::");	
	}
 
/* debugage: affiche bien l'adresse IPV6 de ma machine */
inet_ntop(PF_INET6, &(server.sin6_addr), ip, INET6_ADDRSTRLEN);
printf("::<%s>::\n", ip);
 
 
			/*	construit le serveur	*/
	if((sockS = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP)) == -1) 
	{
		perror("socket");
		exit(1);
	}
 
	if(bind(sockS,  (struct sockaddr*)&server, sizeof(server)) != 0)
	{		
		perror("bind");
		exit(1);
	}
 
	if( listen(sockS, 4) == -1)
	{
		perror("listen");
		exit(1);
	}
 
	if( (sockC = accept(sockS, (struct sockaddr *)&from, &len)) == -1)
	{
		perror("accept");
		exit(1);
	}
	else	puts("connection OK");
 
 
	return 0;
} |