Socket.DuplicateAndClose(Int32) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重复目标进程的套接字引用,并关闭此进程的套接字。
public:
System::Net::Sockets::SocketInformation DuplicateAndClose(int targetProcessId);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public System.Net.Sockets.SocketInformation DuplicateAndClose (int targetProcessId);
public System.Net.Sockets.SocketInformation DuplicateAndClose (int targetProcessId);
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
member this.DuplicateAndClose : int -> System.Net.Sockets.SocketInformation
member this.DuplicateAndClose : int -> System.Net.Sockets.SocketInformation
Public Function DuplicateAndClose (targetProcessId As Integer) As SocketInformation
参数
- targetProcessId
- Int32
从中创建重复套接字引用的目标进程的 ID。
返回
要传递到目标进程的套接字引用。
- 属性
例外
任何 OS 上的 .NET Core 和基于 Unix 的操作系统上的 .NET 5+ :不支持当前平台。
注解
目标进程应使用 Socket(SocketInformation) 构造函数创建重复的套接字实例。
请勿在每次调用中使用 Socket(SocketInformation) 参数中的 SocketInformation 同一字节数组多次调用构造函数。 如果这样做,将有多个具有相同基础套接字的托管 Socket 实例,强烈建议不要这样做。
在.NET Framework,如果创建套接字的进程使用异步方法,则进程必须首先将 UseOnlyOverlappedIO 属性设置为 true
。 否则,异步方法会将套接字绑定到创建进程的 I/O 完成端口 ,这可能会导致 ArgumentNullException 在目标进程中引发 。
在 .NET Core 1.0-3.1 上,此方法不受支持。
在 .NET 5+ 上, DuplicateAndClose(Int32) 对 Windows 的支持有限。 与 .NET Framework 不同,UseOnlyOverlappedIO属性是 NOP,因此创建套接字的进程绝不能在套接字上调用异步方法。 对异步操作的调用将始终将其绑定到创建进程的 I/O 完成端口 ,这可能会导致 ArgumentNullException 在目标进程中引发 。