1 2 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;
} |
Partager