9e1d745eb5d6b521617d0b9101281dd3ef0e1376
[akaros.git] / tests / udp_test.c
1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <netinet/in.h>
4 #include <arpa/inet.h>
5 #include <netdb.h>
6 #include <stdio.h>
7 #include <unistd.h>
8 #include <errno.h>
9 #include <string.h>
10 #include <stdlib.h>
11 #define BUF_SIZE 16
12
13 /* Test program
14  *
15  * Pings the server at argv1: argv2
16  * gets a response and prints it
17  */
18
19 int main(int argc, char* argv[]) {
20         struct sockaddr_in server;
21         char buf[BUF_SIZE] = "hello world";
22         char recv_buf[BUF_SIZE];
23         int sockfd, n;
24         struct hostent* host;
25         if (argc != 3){
26                 printf("udp_test hostname portnum\n");
27                 return -1;
28         }
29         // ignore the host for now
30         //host = gethostbyname(argv[1]); //hostname
31         bzero(&server, sizeof(server));
32         server.sin_family = AF_INET;
33         server.sin_port = htons(atoi(argv[2]));
34         server.sin_addr.s_addr = inet_addr("10.0.0.1"); //hardcoded server
35
36         //memcpy(&server.sin_addr.s_addr, host->h_addr, host->h_length);
37         
38         char* printbuf = (char*)&server.sin_addr.s_addr;
39         int size = sizeof(server.sin_addr.s_addr);      
40         int i;
41         for (i=0; i<size;i++) {
42                 printf("%x", ((char*)printbuf)[i]); 
43         }
44
45         //server.sin_addr = *((struct in_addr *)host->h_addr);
46         sockfd = socket(AF_INET, SOCK_DGRAM, 0);        
47         if (sockfd==-1) {
48                 printf("socket error\n");
49                 return -1;
50         }
51
52         printf ("udp_test: sockfd %d \n", sockfd);
53         int socklen = sizeof(server);
54
55         int sendsize = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr*) &server, socklen);
56         printf("sendto returns %d, errno %d\n", sendsize, errno);
57         //assume BUF_SIZE is larger than the packet.. so we will get to see what actually comes back..
58         if ((n = recvfrom(sockfd, recv_buf, BUF_SIZE, 0, (struct sockaddr*) &server, &socklen)< 0)){
59                 printf("recv failed\n");
60         }
61
62         buf[n-2] = 0; //null terminate
63
64         printf("recv from result %s\n", buf);
65         close(sockfd);
66 }