Поделиться через


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 к возникновению в целевом процессе.

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

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