Windows 系统下为什么 select 库不能用于文件对象?

windows 系统下为什么 select 库不能用于文件对象?

select 使用 io 多路复用 oserror: [winerror 10038]

windows 系统上使用 select 库进行 io 多路复用时,可能会遇到如下错误:

OSError: [WinError 10038] 在一个非套接字上尝试了一个操作

这是因为在 windows 系统中,select 库只能用于套接字,不能用于文件对象。select 函数的第二个参数用于监听文件描述符(即文件句柄),而文件描述符通常由套接字创建。

linux 系统中,select 可以同时监听套接字和文件描述符。但由于 windows 系统中 select 底层实现由 winsock 库提供,而 winsock 仅处理来自 winsock 的文件描述符,因此无法处理来自其他来源(例如文件)的文件描述符。

因此,在 windows 系统上使用 select 时,只能监听套接字,而无法监听文件对象。如果需要监听文件对象,可以使用 windows 提供的其他 api,例如 waitformultipleobjects()。

以上就是Windows 系统下为什么 select 库不能用于文件对象?的详细内容,更多请关注硕下网其它相关文章!