加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows中socket和HANDLE有什么区别?

发布时间:2020-12-13 22:41:32 所属栏目:Windows 来源:网络整理
导读:我正在尝试在 Windows中运行 Linux服务器. 在Linux中,套接字和文件描述符的处理方式相同. 某些系统api可用于套接字和文件描述符. 但是,我通过WIN API处理Winsock和HANDLE(文件描述符)的套接字. 所以我需要知道一个整数是一个套接字或一个HANDLE. Now here is
我正在尝试在 Windows中运行 Linux服务器.

在Linux中,套接字和文件描述符的处理方式相同.
某些系统api可用于套接字和文件描述符.

但是,我通过WIN API处理Winsock和HANDLE(文件描述符)的套接字.

所以我需要知道一个整数是一个套接字或一个HANDLE.

Now here is the question:

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

如果它们总是不同,我可以编写自己的socket()和open()来包装系统的一个.
并记录系统的api的返回值,无论整数是套接字还是HANDLE.

如果它们是相同的,我不知道如何处理它.

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

open()返回与Win32句柄不同的CRT文件描述符.您可以使用_open_osfhandle()创建CRT文件描述符.但是不建议使用套接字,因为您无法以干净的方式关闭文件.您可以使用close()来泄漏Winsock用户模式状态,也可以使用closesocket()来泄漏CRT描述符.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读