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

Идентификатор конечного процесса, в котором создается дубликат ссылки сокета.

Возвращаемое значение

Ссылка сокета, передаваемая в конечный процесс.

Атрибуты

Исключения

.NET Core в любой ОС и .NET 5+ только в ОС под управлением Unix. Текущая платформа не поддерживается.

Параметр targetProcessID не является допустимым идентификатором процесса.

-или-

Дубликат ссылки сокета не создан.

Комментарии

Целевой процесс должен использовать Socket(SocketInformation) конструктор для создания повторяющегося экземпляра сокета.

Не вызывайте Socket(SocketInformation) конструктор несколько раз, используя один и тот же массив байтов в аргументе SocketInformation в каждом вызове. В этом случае у вас будет несколько управляемых Socket экземпляров с одинаковым базовым сокетом, что настоятельно рекомендуется.

На платформа .NET Framework, если процесс создания сокета использует асинхронные методы, процесс сначала должен присвоить свойству UseOnlyOverlappedIO значение true. В противном случае асинхронный метод привязывает сокет к порту завершения ввода-вывода процесса создания, что может привести к возникновению в целевом ArgumentNullException процессе.

В .NET Core 1.0-3.1 этот метод не поддерживается.

В .NET 5 и более поздних версий DuplicateAndClose(Int32) имеет ограниченную поддержку в Windows. В отличие от платформа .NET Framework, UseOnlyOverlappedIO свойство является NOP, поэтому процесс создания сокета никогда не должен вызывать асинхронные методы в сокете. Вызов асинхронной операции всегда привязывает ее к порту завершения ввода-вывода процесса создания, что может вызвать ArgumentNullException исключение в целевом процессе.

Применяется к