Expand description
特定于 Windows 的通用 I/O 原语扩展。
就像裸指针一样,原始的 Windows 句柄和套接字指向具有动态生命周期的资源,如果它们比它们的资源生命周期更长,它们可以悬垂,如果它们是由无效值创建的,则它们可以被伪造。
该模块提供了三种类型来表示具有不同所有权属性的原始句柄和套接字:原始、借用和拥有,类似于用于表示指针的类型:
Type | Analogous to |
---|---|
RawHandle | *const _ |
RawSocket | *const _ |
BorrowedHandle<'a> | &'a _ |
BorrowedSocket<'a> | &'a _ |
OwnedHandle | Box<_> |
OwnedSocket | Box<_> |
和裸指针一样,RawHandle
和 RawSocket
值都是原始值。
并且在新代码中,他们应该被认为是不安全的 (类似于解引用他们)。Rust 并不总是提供这种指导,因此 Rust 生态系统中的现有代码通常不会将 RawHandle
和 RawSocket
的使用标记为不安全。
一旦 io_safety
特性稳定,将鼓励库迁移,通过将 unsafe
添加到解引用 RawHandle
和 RawSocket
值的 API,或通过使用 BorrowedHandle
、BorrowedSocket
、OwnedHandle
或 OwnedSocket
。
与引用一样,BorrowedHandle
和 BorrowedSocket
值与生命周期相关联,以确保它们的生命周期不会超过它们指向的资源。
这些可以安全使用。BorrowedHandle
和 BorrowedSocket
值可用于提供对任何系统调用的安全访问的 API,但 CloseHandle
、closesocket
或将结束资源的动态生命周期而不结束句柄或套接字的生命周期的任何其他调用。
BorrowedHandle
和 BorrowedSocket
值可用于提供对 DuplicateHandle
和 WSADuplicateSocketW
及相关函数的安全访问的 API,因此实现 AsHandle
、AsSocket
、From<OwnedHandle>
或 From<OwnedSocket>
的类型不应假定它们始终具有对底层 object 的独占访问权。
与 boxes 一样,OwnedHandle
和 OwnedSocket
值在概念上拥有它们指向的资源,并在它们被丢弃时释放 (close)。
Structs
- 借来的句柄。
- 借来的套接字。
- 返回值或输出参数句柄的 FFI 类型,其中
INVALID_HANDLE_VALUE
用作哨兵值以指示错误,例如在CreateFileW
的返回值中。 这使用repr(transparent)
并具有主机句柄的表示,因此它可以用于此类 FFI 声明。 - 返回值或输出参数句柄的 FFI 类型,其中
NULL
用作指示错误的哨兵值,例如在CreateThread
的返回值中。 这使用repr(transparent)
并具有主机句柄的表示,因此它可以用于此类 FFI 声明。 - 这是
HandleOrInvalid
在尝试转换为句柄时使用的错误类型,以指示该值为INVALID_HANDLE_VALUE
。 - 这是
HandleOrNull
在尝试转换为句柄时使用的错误类型,以指示该值为空。 - 拥有所有权的句柄。
- 一个拥有所有权的套接字。
Traits
- 从底层对象借用句柄的 trait。
- 提取原始句柄。
- 提取原始套接字。
- 从底层对象借用套接字的 trait。
- 从原始句柄构造 I/O 对象。
- 从原始套接字创建 I/O 对象。
- 一个 trait,表示消费一个对象并获得其原始
HANDLE
所有权的能力。 - 一个 trait,表示消费一个对象并获得其原始
SOCKET
所有权的能力。
Type Definitions
- 原始的句柄。
- 未加工的袜子。