dポイントプレゼントキャンペーン実施中!

Macでネットワークプログラミング(UNIXベースのため)をしようと思っているのですが、サーバプログラムを作り実行したところ、「bind : Can't assign requested address」と出てしまい、実行することができません。
コンパイル時にエラーは出なかったので、プログラム自体にミスはないと思います。
ちなみにOSのバージョンはOS X Tiger 10.4.6です。
どなたか詳しい方、教えて下さい。

A 回答 (3件)

そういえば、これは listen する側のソケットですよね?



だとすると

sin.sin_addr.s_addr = INADDR_ANY;

ではないのかな?

それと念のため

bzero( (char*) &serv, sizeof(serv) );

と最初にしておいた方がいいと思います。
    • good
    • 0
この回答へのお礼

詳しく回答していただき、ありがとうございました。
参考にさせていただきます。

お礼日時:2006/06/25 19:09

serv.sin_port = htons(port);


inet_aton(argv[1], &(serv.sin_addr));

が怪しい感じですね。port 番号はいくつでしょう?1000 未満だと root 権限でないとダメですね。

sin_addr の値は本当に正しいでしょうか? printf() してもましょう。

この回答への補足

ポートは10000など、root権限にする必要のない値にしてます。学校のほうでは、Fedora Core4を使ってプログラミングをしていて、正しく動いているのでsin_addrの値は大丈夫だと思います。
UNIXベースでも、Macだと何か違うところがあるのでしょうか。

補足日時:2006/06/24 20:17
    • good
    • 0

bind() の引数の sockaddr はどういう値をセットしましたか?

この回答への補足

こんな感じです。

構造体を宣言。
struct sockaddr_in serv;

これがIP関連の設定です。構造体にデータを突っ込んでます。mainの引数からIP等を入力させるように組んであるので、argvを使ってます。
serv.sin_family = PF_INET;
serv.sin_port = htons(port);
inet_aton(argv[1], &(serv.sin_addr));
sin_siz = sizeof(struct sockaddr_in);

バインド
bind(sockfd, (struct sockaddr *)&serv, sin_siz);
sockaddr_in から sockaddrへキャストして渡してます。

補足日時:2006/06/23 23:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!