如果启动的进程打开,应用程序退出后Socket不会关闭

JSi*_*ris 7 .net c# sockets

我的C#.net应用程序目前执行以下操作(除其他外):

  1. 创建一个线程,在特定端口上打开套接字并等待指令.
  2. 消息进来,套接字线程读取消息并引发事件.
  3. 事件处理程序调用必要的函数来解析消息并执行必要的操作,例如,启动应用程序.
  4. 指定的外部"应用程序"以异步方式启动.

当我的应用程序重新启动,但外部应用程序没有关闭时,套接字似乎永远不会关闭.然后,当我尝试再次启动该端口上的通信时,我收到错误.但是,只要我关闭外部应用程序,我就可以在该端口上打开一个套接字.

好像我的程序没有正常关闭.它应该在退出时杀死套接字,但是当外部进程运行时,套接字永远不会关闭.

有任何想法吗?

Jos*_*osh 16

这只是一个刺,因为我已经看到你是如何开始外部过程的.如果你正在创建一个Process对象,我的猜测是你没有设置:

ProcessStartInfo.UseShellExecute = true;
Run Code Online (Sandbox Code Playgroud)

如果UseShellExecute设置为false,则子进程将从父进程继承打开的套接字句柄.即使父应用程序已关闭,这也将使您的套接字保持打开状态.