1ce
asked on
upd broadcast in C
Hi
I want to send out udp broadcast to the whole subnet in the simplest way possible. I'm not familiar with socket.h to figure out what to do. Can someone give me some pointer? Sorry for the small amount of point, that's all i have for now. I'll add more once i get more. Thanx
I want to send out udp broadcast to the whole subnet in the simplest way possible. I'm not familiar with socket.h to figure out what to do. Can someone give me some pointer? Sorry for the small amount of point, that's all i have for now. I'll add more once i get more. Thanx
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Try changing:
memcpy((char *) &dst, (char *) &ifr->ifr_broadaddr, sizeof ifr->ifr_broadaddr);
to:
memcpy((char *) &dst, (char *) &ifr->ifr_broadaddr, sizeof(struct sockaddr_in));
and
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof on)
To
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int))
Add add an "#include <sys/ioctl.h>" to the top
memcpy((char *) &dst, (char *) &ifr->ifr_broadaddr, sizeof ifr->ifr_broadaddr);
to:
memcpy((char *) &dst, (char *) &ifr->ifr_broadaddr, sizeof(struct sockaddr_in));
and
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof on)
To
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int))
Add add an "#include <sys/ioctl.h>" to the top
ASKER
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char **argv){
int s, on;
struct sockaddr dst;
struct ifreq *ifr;
char sendbuff[ 1024 ]="balbalbal";
//char *sendaddr="10.10.255.255";
/* Create And Set Up Socket */
s = socket(AF_INET, SOCK_DGRAM, 0);
on = 1;
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int)) == -1) {
printf("setsockopt SO_BROADCAST");
return 0;
}
if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
printf( "ioctl error" );
return;
}
memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size of(struct sockaddr_in));
sendto(s, sendbuff, 1024, 0, (struct sockaddr *)&dst, sizeof (dst));
}
-------------------------- ---------- ----------
It still giving the same error msg when compile. =(
>>if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
socket_udp_bd.c:21: sizeof applied to an incomplete type
>>memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size of(struct sockaddr_in));
socket_udp_bd.c:25: dereferencing pointer to incomplete type
socket_udp_bd.c:25: sizeof applied to an incomplete type
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char **argv){
int s, on;
struct sockaddr dst;
struct ifreq *ifr;
char sendbuff[ 1024 ]="balbalbal";
//char *sendaddr="10.10.255.255";
/* Create And Set Up Socket */
s = socket(AF_INET, SOCK_DGRAM, 0);
on = 1;
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int)) == -1) {
printf("setsockopt SO_BROADCAST");
return 0;
}
if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
printf( "ioctl error" );
return;
}
memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size
sendto(s, sendbuff, 1024, 0, (struct sockaddr *)&dst, sizeof (dst));
}
--------------------------
It still giving the same error msg when compile. =(
>>if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
socket_udp_bd.c:21: sizeof applied to an incomplete type
>>memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size
socket_udp_bd.c:25: dereferencing pointer to incomplete type
socket_udp_bd.c:25: sizeof applied to an incomplete type
ASKER
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char **argv){
int s, on;
struct sockaddr dst;
struct ifreq *ifr;
char sendbuff[ 1024 ]="balbalbal";
//char *sendaddr="10.10.255.255";
/* Create And Set Up Socket */
s = socket(AF_INET, SOCK_DGRAM, 0);
on = 1;
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int)) == -1) {
printf("setsockopt SO_BROADCAST");
return 0;
}
if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
printf( "ioctl error" );
return;
}
memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size of(struct sockaddr_in));
sendto(s, sendbuff, 1024, 0, (struct sockaddr *)&dst, sizeof (dst));
}
-------------------------- ---------- ----------
It still giving the same error msg when compile. =(
>>if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
socket_udp_bd.c:21: sizeof applied to an incomplete type
>>memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size of(struct sockaddr_in));
socket_udp_bd.c:25: dereferencing pointer to incomplete type
socket_udp_bd.c:25: sizeof applied to an incomplete type
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(int argc, char **argv){
int s, on;
struct sockaddr dst;
struct ifreq *ifr;
char sendbuff[ 1024 ]="balbalbal";
//char *sendaddr="10.10.255.255";
/* Create And Set Up Socket */
s = socket(AF_INET, SOCK_DGRAM, 0);
on = 1;
if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof(int)) == -1) {
printf("setsockopt SO_BROADCAST");
return 0;
}
if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
printf( "ioctl error" );
return;
}
memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size
sendto(s, sendbuff, 1024, 0, (struct sockaddr *)&dst, sizeof (dst));
}
--------------------------
It still giving the same error msg when compile. =(
>>if (ioctl(s,SIOCGIFBRDADDR, (char *) ifr) < 0){
socket_udp_bd.c:21: sizeof applied to an incomplete type
>>memcpy((char *) &dst, (char *)&ifr->ifr_broadaddr,size
socket_udp_bd.c:25: dereferencing pointer to incomplete type
socket_udp_bd.c:25: sizeof applied to an incomplete type
ASKER
anyhow, i got it figured out, thanx
ASKER
when i compile this give an error:
if (ioctl(s, SIOCGIFBRDADDR, (char *) ifr) < 0) {
sizeof applied to an incomplete types
i'm on freebsd 4.7