Howdy,
I try to send a broadcast UDP packet from a linux C program.
I can send to every address where I want, but not to the broadcast address.
What's wrong? Here is the source, I hope somebody can help a newbie in linux
network C programing :)
#include <stdio.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
main(int argc, char ** argv)
{
int socketfd;
struct sockaddr_in clientAddress;
struct sockaddr_in serverAddress;
struct hostent *host;
unsigned int sendPort;
int sendSize;
int structSize;
if (argc != 4) {
fprintf(stderr, "Usage: %s hostname port data\n", argv[0]);
exit(0);
}
if ((sendPort = atoi(argv[2])) < 0) {
fprintf(stderr, "Bad port\n");
exit(1);
}
/* find host */
host = gethostbyname(argv[1]);
if (host == NULL) {
fprintf(stderr, "Unknown host %s\n", argv[1]);
exit(1);
}
/* fill in the structure serverAddress with the address of server */
serverAddress.sin_family = AF_INET;
memcpy(&serverAddress.sin_addr, host->h_addr, host->h_length);
serverAddress.sin_port = htons(sendPort);
/* open a UDP socket (an Internet datagram socket) */
if ((socketfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
fprintf(stderr, "Can't open datagram socket\n");
exit(1);
}
/* bind any local address for us. */
clientAddress.sin_family = AF_INET;
clientAddress.sin_addr.s_addr = htonl(INADDR_ANY);
clientAddress.sin_port = htons(0);
if(bind(socketfd,
(struct sockaddr*)&clientAddress,
sizeof(clientAddress)) < 0) {
fprintf(stderr, "Can't bind local address\n");
close(socketfd);
exit(1);
}
/* send a datagram */
sendSize = strlen(argv[3]);
structSize = sizeof(serverAddress);
if (sendto(socketfd, argv[3], sendSize, 0,
(struct sockaddr *)&serverAddress, structSize) != sendSize) {
fprintf(stderr, "sento error\n");
close(socketfd);
exit(1);
}
printf("%d bytes sent (%s)\n", sendSize, argv[3]);
close(socketfd);
exit(0);
}
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]