winsock socket作为文件句柄

And*_*dré 4 winsock filehandle

我一直在摸不着头脑,现在正在寻找一个小时的答案.基本上我所做的是打开其他机器的套接字并从中读取数据.通过传入表示套接字的int的fdopen调用,将此套接字"转换"为文件句柄.然后将生成的文件句柄传递给bison解析器,该解析器直接解析通过套接字接收的数据.所有这些在linux上运行良好.现在我已经尝试将此代码移植到Windows中,但我却失败了.代码看起来像这样:

        FILE* fileHandle;
        #if defined WINCE || defined WIN32
        int fd = _open_osfhandle(socket, _O_RDONLY);
        if (fileHandle = fdopen(fd, "r")) {
        #else
        if (fileHandle = fdopen(socket, "r")) {
        #endif
           ... // code to call my parser with fileHandle as argument
Run Code Online (Sandbox Code Playgroud)

bison/flex解析器在Windows版本中失败,因为文件句柄似乎指向空流/文件.任何人都可以指出一个全面的资源来解释这个东西或提示替代解决方案吗?

谢谢和最诚挚的问候,

安德烈

Rem*_*eau 8

在Windows中,套接字句柄不是文件句柄,您无法在C API中对其进行处理.在Linux中,你可以.但是,在Windows中,套接字句柄可以传递给ReadFile/Ex()和WriteFile/Ex()函数,它们支持多种句柄类型,而不仅仅是文件,尽管它们的名称.