1

私はグーグル全体を検索しましたが、この問題の解決策が見つかりません:

Android デバイスで基本的なソケット プログラミング (クライアント/サーバー アプリ) を実行しようとしていますが、サーバー アプリを起動できません。ネイティブ コードで bind(...) を呼び出すと、ログから -1 が返されることがわかります。errno を確認すると、値は 97 (EAFNOSUPPORT) であり、「プロトコルでサポートされていないアドレス ファミリ」を示しています。sin_family の値を確認したところ、IPv4 である AF_INET でした。これは Android NDK でサポートされていませんか? そうでない場合、このエラーの原因は他に何が考えられますか?

ソケットは次のように初期化されます。

sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP));

listenAddr は、以下で初期化される sockaddr_in 構造体です。

sin_family = AF_INET;
sin_port = htons(9099);
sin_addr.s_addr = INADDR_NONE;

バインドする呼び出し:

bindResult = bind(sock, (sockaddr *)listenAddr, sizeof(listenAddr))

バインド結果は -1 を返します。その後 errno を呼び出すと、97 が返されます。

4

1 に答える 1

0

INADDR_NONE ではなく INADDR_ANY (または特定のインターフェイスのアドレス) を使用します。

INADDR_NONE は、符号付きの値 -1 と同じビット パターンを持つ符号なしの定数で、特定の呼び出しからのエラーの表示として返されます。

于 2012-11-10T02:56:52.850 に答える