Skip to content
Snippets Groups Projects
Commit ed7b40fb authored by KOLESNIKOV KIRILL's avatar KOLESNIKOV KIRILL
Browse files

Exo 6 fait

parent 44dbd92a
Branches
No related merge requests found
File added
File added
......@@ -13,25 +13,63 @@
#define IP "::1"
#define SIZE 100
int main (int argc, char *argv [])
int main (int argc, char *argv [1])
{
/* test arg number */
if(argc != 2)
{
perror("Invalid argument's number\n");
exit(EXIT_FAILURE);
}
/* convert and check port number */
int port_number = atoi(argv[1]);
if(port_number < 10000 || port_number > 65000){
perror("Invalid port number\n");
exit(EXIT_FAILURE);
}
/* create socket */
int new_socket=socket(AF_INET6,SOCK_DGRAM,IPPROTO_UDP);
CHECK(new_socket);
int error;
struct addrinfo *res;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
error =getaddrinfo(IP,argv[1],&hints,&res);
if(error!=0){
perror("getaddrinfo\n");
exit(EXIT_FAILURE);
}
/* complete struct sockaddr */
struct addrinfo *list_udp=res;
while (list_udp->ai_protocol != IPPROTO_UDP)
{
list_udp = list_udp->ai_next;
if (list_udp == NULL)
{
perror("Problème pas de protocole UDP");
exit(EXIT_FAILURE);
}
}
/* link socket to local IP and PORT */
CHECK(bind(new_socket,list_udp->ai_addr,list_udp->ai_addrlen));
/* wait for incoming message */
char buffer[SIZE],ip[SIZE],port[SIZE];
struct sockaddr_storage socket_storage;
socklen_t socket_len = sizeof(socket_storage);
int result =recvfrom(new_socket,buffer,SIZE,0,(struct sockaddr*)&socket_storage,&socket_len);
CHECK(result);
/* print sender addr and port */
if(getnameinfo((struct sockaddr*)&socket_storage,socket_len,ip,SIZE,port,SIZE,NI_NUMERICHOST | NI_NUMERICSERV)==0){
fprintf(stdout,"hello world\n");
fprintf(stdout,"%s %s\n",ip,port);
}
/* close socket */
close(new_socket);
/* free memory */
freeaddrinfo(res);
return 0;
}
File added
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment