#include #include #include #include #include #include #include #include #include #include #include #define BROADCAST_PORT 5000 #define MESSAGE "Hello from broadcast!" void error_exit(const char *msg) { perror(msg); exit(EXIT_FAILURE); } void sleep_ms(int milliseconds) { struct timespec ts; ts.tv_sec = milliseconds / 1000; ts.tv_nsec = (milliseconds % 1000) * 1000000; nanosleep(&ts, NULL); } int main(int argc, char *argv[]) { if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(EXIT_FAILURE); } const char *iface = argv[1]; int period_ms = atoi(argv[2]); int sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd < 0) error_exit("socket"); // Enable broadcast int broadcastEnable = 1; if (setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable)) < 0) error_exit("setsockopt SO_BROADCAST"); // Bind to a specific interface if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, iface, strlen(iface)) < 0) error_exit("setsockopt SO_BINDTODEVICE"); struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(BROADCAST_PORT); addr.sin_addr.s_addr = inet_addr("255.255.255.255"); while (1) { ssize_t sent = sendto(sockfd, MESSAGE, strlen(MESSAGE), 0, (struct sockaddr *)&addr, sizeof(addr)); if (sent < 0) perror("sendto"); sleep_ms(period_ms); } close(sockfd); return 0; }