aboutsummaryrefslogtreecommitdiff
path: root/listener.c
diff options
context:
space:
mode:
authorsotech117 <michael_foiani@brown.edu>2023-09-18 15:32:05 -0400
committersotech117 <michael_foiani@brown.edu>2023-09-18 15:32:05 -0400
commitbc24590991cb27e8bd220fd6d0585e76f804601d (patch)
tree8a982cf0144dd8366aca84cf8027387403f51af2 /listener.c
parent5236560176cfe8e4d06be4812719037937b7f4dc (diff)
good progress. basic num_station data going & listener udp port works
Diffstat (limited to 'listener.c')
-rw-r--r--listener.c50
1 files changed, 31 insertions, 19 deletions
diff --git a/listener.c b/listener.c
index 723cb1b..2d46307 100644
--- a/listener.c
+++ b/listener.c
@@ -13,9 +13,9 @@
#include <arpa/inet.h>
#include <netdb.h>
-#define MYPORT "4950" // the port users will be connecting to
+// #define MYPORT "4950" // the port users will be connecting to
-#define MAXBUFLEN 100
+#define MAXBUFLEN 16384
// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
@@ -27,7 +27,7 @@ void *get_in_addr(struct sockaddr *sa)
return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
-int main(void)
+int main(int argc, char *argv[])
{
int sockfd;
struct addrinfo hints, *servinfo, *p;
@@ -38,12 +38,20 @@ int main(void)
socklen_t addr_len;
char s[INET6_ADDRSTRLEN];
+ if (argc != 2) {
+ fprintf(stderr,"<udp port>\n");
+ exit(1);
+ }
+
+ const char* udp_port = argv[1];
+
+
memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_INET6; // set to AF_INET to use IPv4
+ hints.ai_family = AF_INET; // set to AF_INET to use IPv4
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE; // use my IP
- if ((rv = getaddrinfo(NULL, MYPORT, &hints, &servinfo)) != 0) {
+ if ((rv = getaddrinfo(NULL, udp_port, &hints, &servinfo)) != 0) {
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
return 1;
}
@@ -72,22 +80,26 @@ int main(void)
freeaddrinfo(servinfo);
- printf("listener: waiting to recvfrom...\n");
+ int count = 0;
- addr_len = sizeof their_addr;
- if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0,
- (struct sockaddr *)&their_addr, &addr_len)) == -1) {
- perror("recvfrom");
- exit(1);
- }
+ while(1) {
+ printf("\nlistener: waiting to recvfrom... %d times\n", count++);
- printf("listener: got packet from %s\n",
- inet_ntop(their_addr.ss_family,
- get_in_addr((struct sockaddr *)&their_addr),
- s, sizeof s));
- printf("listener: packet is %d bytes long\n", numbytes);
- buf[numbytes] = '\0';
- printf("listener: packet contains \"%s\"\n", buf);
+ addr_len = sizeof their_addr;
+ if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN , 0,
+ (struct sockaddr *)&their_addr, &addr_len)) == -1) {
+ perror("recvfrom");
+ exit(1);
+ }
+
+ printf("listener: got packet from %s\n",
+ inet_ntop(their_addr.ss_family,
+ get_in_addr((struct sockaddr *)&their_addr),
+ s, sizeof s));
+ printf("listener: packet is %d bytes long\n", numbytes);
+ buf[numbytes] = '\0';
+ printf("listener: packet contains \"%s\"\n", buf);
+ }
close(sockfd);