我在谷歌上搜索过,找不到解决这个问题的方法:
我正在尝试在我的Android设备上执行一些基本的套接字编程(客户端/服务器应用程序),而且我没有运气启动Server应用程序。在我的本机代码中,我调用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。
答案 0 :(得分:0)
使用INADDR_ANY(或特定接口的地址)而不是INADDR_NONE。
INADDR_NONE是一个无符号常量,具有与有符号值-1相同的位模式,作为某些调用的错误指示返回。