Я думаю, что дескрипторы сокетов, созданные классом .NET Socket, наследуются по умолчанию.IIRC Если вы порождаете дочерний процесс, используя Process.Start
и ProcessStartInfo.UseShellExecute = false
(ShellExecute не разрешает наследование дескриптора), ваш дочерний процесс должен уже наследовать дескриптор сокета.Вы пытались просто передать Socket.Handle дочернему процессу и использовать его там?И я думаю , что, пока дочерний процесс владеет унаследованным дескриптором, сокет остается открытым даже после того, как процесс, который его создал, исчез.(Я никогда не использовал это напрямую, но у меня когда-то была средняя ошибка, вызванная этим поведением.) Однако, возможно, сокет был открыт с такими флагами, как FILE_FLAG_OVERLAPPED и т. Д., И вам придется использовать правильную комбинацию функций для доступа к нему.