• ベストアンサー

Macでのソケットプログラミング(ネットワークプログラミング)

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

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

  • ベストアンサー
  • chirubou
  • ベストアンサー率37% (189/502)
回答No.3

そういえば、これは listen する側のソケットですよね? だとすると sin.sin_addr.s_addr = INADDR_ANY; ではないのかな? それと念のため bzero( (char*) &serv, sizeof(serv) ); と最初にしておいた方がいいと思います。

likeacar5417
質問者

お礼

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

その他の回答 (2)

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.2

serv.sin_port = htons(port); inet_aton(argv[1], &(serv.sin_addr)); が怪しい感じですね。port 番号はいくつでしょう?1000 未満だと root 権限でないとダメですね。 sin_addr の値は本当に正しいでしょうか? printf() してもましょう。

likeacar5417
質問者

補足

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

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.1

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

likeacar5417
質問者

補足

こんな感じです。 構造体を宣言。 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へキャストして渡してます。

関連するQ&A

専門家に質問してみよう