diff options
author | sotech117 <michael_foiani@brown.edu> | 2023-09-23 17:30:45 -0400 |
---|---|---|
committer | sotech117 <michael_foiani@brown.edu> | 2023-09-23 17:30:45 -0400 |
commit | 3b2aa8c271bf5cd5497decb6577afe5fd7339f57 (patch) | |
tree | bc1d39ad76b15f58ddf61385645fa87a59fb1157 /listener.c | |
parent | b417bcc57b9fd49f360087c32c97293a6bc7d2be (diff) | |
parent | 1e9ac5407ef4f2cddc745f35f33a860446526cea (diff) |
merge post-warmup with main
Diffstat (limited to 'listener.c')
-rw-r--r-- | listener.c | 46 |
1 files changed, 26 insertions, 20 deletions
@@ -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,23 +27,30 @@ 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; int rv; int numbytes; struct sockaddr_storage their_addr; - char buf[MAXBUFLEN]; 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 +79,21 @@ 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); - } + char buf[MAXBUFLEN]; + while(1) { + addr_len = sizeof their_addr; + if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN , 0, + (struct sockaddr *)&their_addr, &addr_len)) == -1) { + perror("recvfrom"); + exit(1); + } + // print the buffer + write(STDOUT_FILENO, buf, numbytes); - 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); + memset(buf, 0, MAXBUFLEN); + } close(sockfd); |