Fixed a small bug associated with UDP length and return code form recv.
[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         char* printbuf = (char*)&server.sin_addr.s_addr;
37         int size = sizeof(server.sin_addr.s_addr);      
38         int i;
39         for (i=0; i<size;i++) {
40                 printf("%x", ((char*)printbuf)[i]); 
41         }
42
43         //server.sin_addr = *((struct in_addr *)host->h_addr);
44         sockfd = socket(AF_INET, SOCK_DGRAM, 0);        
45         if (sockfd==-1) {
46                 printf("socket error\n");
47                 return -1;
48         }
49
50         printf ("udp_test: sockfd %d \n", sockfd);
51         int socklen = sizeof(server);
52
53         int sendsize = sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr*) &server, socklen);
54         printf("sendto returns %d, errno %d\n", sendsize, errno);
55         //assume BUF_SIZE is larger than the packet.. so we will get to see what actually comes back..
56         int j=0;
57         for (j=0; j<1; j++){
58                 strcpy(recv_buf, "DEADBEEFDEADBEE");
59                 if (((n = recvfrom(sockfd, recv_buf, BUF_SIZE, 0, (struct sockaddr*) &server, &socklen))< 0)){
60                         printf("recv failed\n");
61                 }
62                 recv_buf[n-2] = 0; //null terminate
63                 printf("recv %d with length %d from result %s\n", j,n,  recv_buf);
64         }
65
66
67         close(sockfd);
68 }