1

我在谷歌上搜索过,找不到解决这个问题的方法:

我正在尝试在我的 Android 设备上进行一些基本的套接字编程(客户端/服务器应用程序),但我没有任何运气来启动服务器应用程序。在我的本机代码中,我调用了 bind(...),我从日志中看到它返回 -1。当我检查errno时,值为97(EAFNOSUPPORT),表示“协议不支持地址族”。当我检查 sin_family 的值时,它是 AF_INET,即 IPv4。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_ANY(或特定接口的地址)而不是 INADDR_NONE。

INADDR_NONE 是一个无符号常量,其位模式与有符号值 -1 相同,作为来自某些调用的错误指示而返回。

于 2012-11-10T02:56:52.850 回答