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 процессе.