- ベストアンサー
Macでのソケットプログラミング(ネットワークプログラミング)
Macでネットワークプログラミング(UNIXベースのため)をしようと思っているのですが、サーバプログラムを作り実行したところ、「bind : Can't assign requested address」と出てしまい、実行することができません。 コンパイル時にエラーは出なかったので、プログラム自体にミスはないと思います。 ちなみにOSのバージョンはOS X Tiger 10.4.6です。 どなたか詳しい方、教えて下さい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
そういえば、これは listen する側のソケットですよね? だとすると sin.sin_addr.s_addr = INADDR_ANY; ではないのかな? それと念のため bzero( (char*) &serv, sizeof(serv) ); と最初にしておいた方がいいと思います。
その他の回答 (2)
- chirubou
- ベストアンサー率37% (189/502)
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だと何か違うところがあるのでしょうか。
- chirubou
- ベストアンサー率37% (189/502)
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へキャストして渡してます。
お礼
詳しく回答していただき、ありがとうございました。 参考にさせていただきます。