DotNet似乎允许两个进程打开同一端口?

时间:2019-02-07 17:54:42

标签: .net linux sockets docker .net-core

我正在Docker centos:7容器上运行DotNet服务,而在dotnet publishdotnet run情况下,代码运行出现问题。

我当前正在运行dotnet服务,该服务侦听端口3480。看来我正在运行的dotnet代码也试图在同一端口上实例化一个TcpListener

dotnet run模式下,出现使其发生,在发布时,我遇到address in use错误。

所以在运行代码之前,我有这个net stat -lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3840            0.0.0.0:*               LISTEN      5017/dotnet
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      -

其中 pid 5017 我的服务正在侦听TCP端口

启动代码后,内容如下:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        1      0 0.0.0.0:3840            0.0.0.0:*               LISTEN      5247/dotnet
tcp        0      0 172.17.0.2:4000         0.0.0.0:*               LISTEN      5247/dotnet
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      -

PID 5247 似乎已被接管?

然后,当我终止代码时,我们回到这种状态:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:3840            0.0.0.0:*               LISTEN      5017/dotnet
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      -

我能想到的唯一区别是当我做一个ps -eo pid, command时:

 5017 /usr/bin/dotnet /usr/share/my-agent/My.Agent.Linux.dll
 5247 dotnet exec /devel/SandBox/bin/Debug/netcoreapp2.0/ServerSandbox.dll

如果我运行发布的版本dotnet publish -o publish -r linux-x64 -c Debug,我会得到:

 5017 /usr/bin/dotnet /usr/share/my-agent/My.Agent.Linux.dll
 8405 ./publish/My.ServerSandbox

随着代码崩溃,PID控制端口4080保持不变。

我的流程虽然是DotNet Runtime实际上是在管理端口本身-这就是为什么它将允许同一端口打开两次的原因,就像我发布代码时使用的是嵌入式运行时,因此我们被抓捕做了不该发生的事情。

有人以前见过这种行为吗?我一直在兜圈子我为什么不能使发布的版本正常运行,而在挖掘之后,我认为它的运行版本不应该正常运行。

感谢您提供的任何建议/帮助。

1 个答案:

答案 0 :(得分:0)

进行一些研究后,我们的服务器确实在执行我们怀疑的操作。我们更改了源代码,以防止两次打开相同的端口,一切都陷入了困境。至于为什么甚至有这种可能,我仍然感到困惑-因此,如果您遇到类似的情况,希望这个问题可以为您提供安慰。