vrmodel

annotate inptools/test/src/main.c @ 0:affaad5fcd30

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 29 Aug 2014 18:56:54 +0300
parents
children be91b72ce3f9
rev   line source
nuclear@0 1 #include <stdio.h>
nuclear@0 2 #include <stdlib.h>
nuclear@0 3 #include <string.h>
nuclear@0 4 #include <unistd.h>
nuclear@0 5 #include <sys/types.h>
nuclear@0 6 #include <sys/socket.h>
nuclear@0 7 #include <arpa/inet.h>
nuclear@0 8 #include <sys/time.h>
nuclear@0 9 #include <sys/select.h>
nuclear@0 10
nuclear@0 11 #define MAGIC 0x6d0f
nuclear@0 12 #define DISCOVER 1
nuclear@0 13 #define DREPLY 2
nuclear@0 14
nuclear@0 15 struct message {
nuclear@0 16 int magic;
nuclear@0 17 int type;
nuclear@0 18 char data[24];
nuclear@0 19 };
nuclear@0 20
nuclear@0 21 int discover(struct sockaddr_in *client_sa);
nuclear@0 22
nuclear@0 23 int opt_dport = 0x6d0f; /* discover broadcast port */
nuclear@0 24 unsigned int opt_timeout = 5000; /* 10 sec discovery timeout */
nuclear@0 25
nuclear@0 26 int main(int argc, char **argv)
nuclear@0 27 {
nuclear@0 28 }
nuclear@0 29
nuclear@0 30 int discover(struct sockaddr_in *client_sa)
nuclear@0 31 {
nuclear@0 32 int s, true = 1;
nuclear@0 33 struct sockaddr_in sa;
nuclear@0 34 unsigned int timeout = opt_timeout;
nuclear@0 35 struct message msg;
nuclear@0 36 struct timeval tv, tv_timeout;
nuclear@0 37
nuclear@0 38 if((s = socket(PF_INET, SOCK_DGRAM, 0)) == -1) {
nuclear@0 39 perror("failed to create discover datagram socket");
nuclear@0 40 return -1;
nuclear@0 41 }
nuclear@0 42 setsockopt(s, SOL_SOCKET, SO_BROADCAST, &true, sizeof true);
nuclear@0 43
nuclear@0 44 memset(&sa, 0, sizeof sa);
nuclear@0 45 sa.sin_family = AF_INET;
nuclear@0 46 sa.sin_port = htons(opt_dport);
nuclear@0 47 sa.sin_addr.s_addr = htonl(INADDR_ANY);
nuclear@0 48
nuclear@0 49 if(bind(s, (struct sockaddr*)&sa, sizeof sa) == -1) {
nuclear@0 50 perror("failed to bind datagram socket");
nuclear@0 51 close(s);
nuclear@0 52 return -1;
nuclear@0 53 }
nuclear@0 54
nuclear@0 55 do {
nuclear@0 56 msg.magic = MAGIC;
nuclear@0 57 msg.type = DISCOVER;
nuclear@0 58
nuclear@0 59 memset(&sa, 0, sizeof sa);
nuclear@0 60 sa.sin_family = AF_INET;
nuclear@0 61 sa.sin_port = htons(opt_dport);
nuclear@0 62 sa.sin_addr.s_addr = 0xffffffff;
nuclear@0 63
nuclear@0 64 if(sendto(s, &msg, sizeof msg, 0, (struct sockaddr*)&sa, sizeof sa) == -1) {
nuclear@0 65 perror("failed to send discovery bcast dgram");
nuclear@0 66 close(s);
nuclear@0 67 return -1;
nuclear@0 68 }
nuclear@0 69 } while(0);
nuclear@0 70
nuclear@0 71 close(s);
nuclear@0 72 return 0;
nuclear@0 73 }