gpt4 book ai didi

windows - Windows 中的 socket 和 HANDLE 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 12:43:07 30 4
gpt4 key购买 nike

我正在尝试制作一个在 Windows 中运行的 Linux 服务器。

套接字和文件描述符在 Linux 中被视为相同。一些系统 api 可用于套接字和文件描述符。

但是,我通过 WIN API 处理 Winsock 和 HANDLE(文件描述符)。

所以我需要知道一个整数是一个套接字还是一个句柄。

Now here is the question:

Would the return value from socket() and open() be the same in Windows?

如果它们总是不同,我可以编写自己的 socket() 和 open() 来包装系统的。并记录系统api的返回值,判断整数是socket还是HANDLE。

如果它们相同,我不知道如何处理。

最佳答案

套接字句柄是 Win32(NT 内核)句柄,因此您可以对它们使用 ReadFile 或 WriteFile 等。还有与由 Winsock 维护的句柄关联的用户模式状态,这就是为什么您需要使用 closesocket() 而不是 CloseHandle() 的原因。

open() 返回不同于 Win32 句柄的 CRT 文件描述符。您可以使用 _open_osfhandle() 创建 CRT 文件描述符.但这不推荐用于套接字,因为您无法以干净的方式关闭文件。您要么使用将泄漏 Winsock 用户模式状态的 close(),要么使用将泄漏 CRT 描述符的 closesocket()。

关于windows - Windows 中的 socket 和 HANDLE 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676256/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com