android - 确定套接字何时在 Android 上关闭

标签 android c++ linux sockets networking

在 Windows 和 iOS 上,我目前正在执行以下操作:

//sock is defined as a valid socket.
fd_set socketsRead;
fd_set socketsWrite;
fd_set socketsExcept;
FD_ZERO(&socketsRead);
FD_ADD(sock, &socketsRead);
FD_ZERO(&socketsWrite);
FD_ADD(sock, &socketsWrite);
FD_ZERO(&socketsExcept);
FD_ADD(sock, &socketsExcept);
timeval timeOut;
timeOut.tv_sec = 0;
timeOut.tv_usec = 100;
bool read, write, except;
if (select(sock + 1, &socketsRead, &socketsWrite, &socketsExcept, &timeOut) == SOCKET_ERROR) {
    read = false;
    write = false;
    except = true;
} else {
    read = FD_ISSET(sock, &socketsRead);
    write = FD_ISSET(sock, &socketsWrite);
    except = FD_ISSET(sock, &socketsExcept);
}

if (read) {
    long availableData;
    ioctlsocket(sock, FIONREAD, &availableData);
    if (availableData == 0) {
        //Connection is closed.
    }
}

在 Android 上,它似乎不起作用。当我建立连接时,它一直认为连接已关闭。也就是说,读取标志被设置,并且 FIONREAD 在建立连接时立即返回 0

最佳答案

似乎 FIONREAD 定义不正确 - 它使用的是 Windows/iOS 常量值而不是 Android 常量值。

关于android - 确定套接字何时在 Android 上关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18278576/

相关文章:

android - 在 Android 中扩展 AlertDialog(在哪里可以找到示例,如何获取标题和按钮)

android - Cast Session 终止,错误代码为 2005

c++ - CreateRemoteThread失败,可能目标进程中的lpBaseAddress无效,但它是系统分配的?

linux - 检查BIOS/UEFI中是否启用了VT-D/IOMMU

linux - 读取/复制附加到的文件有多安全?

android - 更改android中alertdialog的标题大小?

android - 如何为主机卡仿真的 STORE DATA 定义 APDU?

c++ - 为什么顶点数组对象会导致错误?

c++ - 如何在xcode中链接glew

linux - 如何在忽略某些目录名称的同时比较两个目录?