Socket.DuplicateAndClose(Int32) 方法

定义

重复目标进程的套接字引用,并关闭此进程的套接字。

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+ :不支持当前平台。

targetProcessID 不是有效的进程 ID。

- 或 -

套接字引用的复制失败。

注解

目标进程应使用 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 在目标进程中引发 。

适用于