Created
December 26, 2022 16:48
-
-
Save mrpossoms/043ef6f7643ff1b92daf931daa011c8b to your computer and use it in GitHub Desktop.
Linux UDP Broadcast minimal example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <sys/socket.h> | |
#include <sys/types.h> | |
#include <netdb.h> | |
#include <arpa/inet.h> | |
#include <unistd.h> | |
int enable = 1; | |
int listener(int sock) | |
{ | |
printf("Listener\n"); | |
struct sockaddr_in rcv_addr = {}; | |
socklen_t addr_len = sizeof(rcv_addr); | |
/* We bind it to broadcast addr on the given port */ | |
rcv_addr.sin_family = AF_INET; | |
rcv_addr.sin_port = htons(6969); | |
rcv_addr.sin_addr.s_addr = INADDR_ANY; | |
if (bind(sock, (struct sockaddr *) &rcv_addr, sizeof(struct sockaddr_in)) < 0) | |
{ | |
exit(1); | |
} | |
while(1) | |
{ | |
char buf[128] = {}; | |
int len = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr*)&rcv_addr, &addr_len); | |
if (len <= 0) { continue; } | |
printf(":%s\n", buf); | |
} | |
return 0; | |
} | |
int broadcaster(int sock) | |
{ | |
printf("Broadcaster\n"); | |
char hello[] = "Hello neighbor"; | |
while(1) | |
{ | |
struct sockaddr_in name = {}; | |
name.sin_family = AF_INET; | |
name.sin_port = htons(6969); | |
name.sin_addr.s_addr = htonl(INADDR_BROADCAST); | |
sendto(sock, hello, sizeof(hello), 0, (struct sockaddr*)&name, sizeof(name)); | |
sleep(1); | |
} | |
return 0; | |
} | |
int main(int argc, const char* argv[]) | |
{ | |
int sock = socket(AF_INET, SOCK_DGRAM, 0); | |
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (const void*)&enable, sizeof(enable)); | |
if (argc > 1) | |
{ | |
return listener(sock); | |
} | |
else | |
{ | |
return broadcaster(sock); | |
} | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment