こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

UDPでのブロードキャスト送信

Linuxで下記UDPブロードキャスト送信プログラムを作ったのですが、sendto()関数の戻り値が-1となり
エラーとなってしまうので送信できません。
何が悪いのでしょうか?
ちなみにIPアドレスは192.168.0.1 サブネットマスクは255.255.0..0でやっています。
又、サブネットマスクを0.0.0.0で試してもみましたがダメでした。

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>

int
main()
{
int sock;
struct sockaddr_in addr;
int yes = 1;

sock = socket(AF_INET, SOCK_DGRAM, 0);

addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = inet_addr("255.255.255.255");

setsockopt(sock,
SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof(yes));

if(sendto(sock, "HELLO", 5, 0, (struct sockaddr *)&addr, sizeof(addr))!=5)
printf("send error!!\n");

close(sock);

return 0;
}

投稿日時 - 2014-01-17 10:51:53

QNo.8433578

困ってます

質問者が選んだベストアンサー

192.168 てのは、typical internal use for class C network ですが、クラスC アドレスの場合のnetmaskは
255.255.255.0 です。

 その辺が、テスト環境と合っているのか、まず、確認しましょう。

投稿日時 - 2014-01-17 11:27:02

補足

netmaskを255.255.255.0で試してみましたが同じ結果になりました。

投稿日時 - 2014-01-17 22:08:45

お礼

ゲートウェイを設定したらできました。
netmaskは関係ありませんでした。

投稿日時 - 2014-02-03 21:53:15

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ま、私が、あなたなら、

sock = socket(AF_INET, SOCK_DGRAM, 0);

setsockopt(sock,
SOL_SOCKET, SO_BROADCAST, (char *)&yes, sizeof(yes));

sendto(sock, "HELLO", 5, 0, (struct sockaddr *)&addr, sizeof(addr))!

 で、それぞれ、エラーリターンになってないか、チェックして、それで、エラーリターンなら、errnoをプリントさせますね。

投稿日時 - 2014-01-17 23:08:57

あなたにオススメの質問