Windows 7 中两个进程如何监听同一端口?

2024-03-20

我在 Windows 7 中运行两个 stunnel 实例,配置为侦听同一端口,并且它们似乎都成功侦听同一端口(仅使用 socket()/bind()/listen())。两个实例的所有调用似乎都成功,并且它们显示在 netstat 中:

C:\>netstat -ano | grep 8000
  TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       5828
  TCP    0.0.0.0:8000           0.0.0.0:0              LISTENING       5852

第一个监听的人会获取所有传入的请求。

这与我的所有期望几乎相反。 (我期待 EADDRINUSE 告诉我端口正忙。)所以......

  1. 为什么/这是如何工作的?这种行为在某些情况下有用吗?
  2. 如果另一个应用程序要捕获传入请求,我不希望实例成功运行...如何使端口独占?

如果使用标志打开套接字,则可以完成此操作SO_REUSEADDR http://msdn.microsoft.com/en-us/library/windows/desktop/ms740621%28v=vs.85%29.aspx,这对于 TCP 套接字应用程序来说并不罕见。

通常,SO_REUSEADDR 用于以下两件事之一:

  1. 当进程崩溃、被终止或强制重新启动而没有机会关闭其套接字时。或者进程退出但套接字(或子连接套接字)仍处于FIN_WAIT或FIN_WAIT2状态。第二个进程可以打开套接字,而不会收到“已在使用”错误代码。我读过几篇关于 S.O. 的文章。表明这是 TCP 套接字的最佳实践。

  2. 同一服务器程序要么分叉,要么同时运行多次。这允许负载平衡,而无需编写使用线程的服务器程序。通常,侦听套接字的程序的“其他实例”将接受传入连接,而第一个实例正忙于另一个连接。

关于你的第二个问题,最简单的方法就是不使用SO_REUSEADDR。如果您担心可能有恶意应用程序尝试使用 SO_REUSADDR,那么您的应用程序可以使用 SO_EXCLUSIVEADDRUSE。 (一个标志,基本上是说,“不允许其他应用程序使用 SO_REUSEADDR 打开同一个端口。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 7 中两个进程如何监听同一端口? 的相关文章

  • Python 在打开套接字时可以选择哪个网络适配器吗?

    运行 python 应用程序的目标计算机将具有三个可用的网络接口 一般来说 所有三个网络都会有很大不同 但是三个网络中的两个可能位于相似的网络上 在下面的示例中 我无法控制 ETH 2 上的目标地址 因为它是预先配置的系统 因此我被迫以编程
  • Python套接字模块:Recv()数据响应被切断

    解释 我目前正在尝试使用 python 脚本控制智能电源板 为了实现这一点 我使用了带有套接字模块的 TCP 连接 大约 75 的情况下 我会得到我正在寻找的响应 数据 并且一切都运行良好 然而 大约 25 的情况下 响应会以完全相同的长度
  • 开源 C# 套接字 (TCP + UDP) 库 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对 NET 框架的标准套接字类感到头疼 有人可以推荐一个高效的开源 C 套接字 TCP UDP 库来处理套接字消息吗 使用 Kerry Jia
  • AsyncTask,doInBackground永远不会在android中运行

    当我尝试启动 doinbackground 来等待传入消息时 它从未真正运行过 只是跳过它 public class Incomingdata extends AsyncTask
  • Python 套接字库认为套接字未打开时已打开

    我正在使用一些Python 如下所示 HOST 127 0 0 1 PORT 43434 single socket socket socket AF INET socket SOCK STREAM try single bind HOST
  • 开发 Delphi Windows 7 应用程序的规则 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在哪里可以找到开发适用于 Windows 7 的 Delphi 应用程序时应遵循的最佳规则集 Marco 最近发表了 2 篇关于此主题的帖
  • 关闭/清理“混合”文件描述符/套接字

    当我使用accept 创建一个套接字并使用fdopen 从中创建一个文件时 我需要做什么来清理所有内容 我是否需要对 FILE 执行 fclose 对套接字执行 shutdown 和 close 还是只需要 shutdown 和 或 clo
  • 在 PowerShell 中通过 UDP 发送和接收数据

    我正在尝试编写一个脚本来使用 PowerShell 进行测试和应用 测试应包括通过 UDP 向远程服务器发送字符串 然后读取该服务器的响应并对结果执行某些操作 我需要的唯一帮助是脚本的中间两个步骤 发送字符串 然后 接收响应 在端口 UDP
  • 如何解除阻塞在 ServerSocket.accept() 上的线程?

    我有一个带有以下代码的服务器线程 public void run try ServerSocket server EneaLog printLog Server is running server new ServerSocket this
  • Android Socket + ObjectOutputStream 无法正常工作

    我正在开发一个客户端 服务器程序 其中客户端是 Android 设备 服务器有一个从输入流读取对象的侦听器类 我为另一台计算机创建了一个客户端软件 该软件通过本地网络发送一个小对象 计算机到计算机工作得很好 我读取了该对象并打印了内容 但是
  • Windows 下 iOS 开发的替代方案 [重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 Windows 开发机为 iPhone 进行开发 https stackoverflow com questions 22358 how can i develop for iphone u
  • 如何防止文件重定向到 VirtualStore 来读/写文件?

    我正在使用 C 和 net 2 0 我将程序数据保存在以下文件中 C ProgramData MyProgramName fileName xml 安装并运行我的应用程序一次后 我将其卸载 在卸载过程中 我从 程序数据 中删除了所有文件 然
  • 在 PCL 中使用 System.Net.Sockets(.Net 4.5 + 电话 8)

    我现有的 Net 库已经适用于 Net 4 5 和 Windows Phone 8 现在我想将其转换为可移植类库 突然我无法使用System Net Sockets不再了 我只检查了 Net 4 5和Windows Phone 8 未选择X
  • Linux TCP服务器:在接受连接之前读取客户端的IP地址

    Related C Winsock API如何在接受连接之前获取连接客户端IP https stackoverflow com questions 716209 c winsock api how to get connecting cli
  • Rails 应用程序中的持久 TCP 连接

    我有一个在服务器上运行的第三方应用程序 它对客户端进行身份验证并返回响应 我的问题是 对于我收到 Rails 应用程序的每个请求 我都需要建立 TCP 连接并获取数据 是否可以有一个持久连接 以便我可以减少建立连接的开销 我希望你使用的是
  • Linux 中 AF_UNIX 数据报消息的最大大小是多少?

    目前我已达到 130688 字节的硬限制 如果我尝试在一条消息中发送更大的内容 我会收到一条消息ENOBUFS error 我已经检查过net core rmem default net core wmem default net core
  • Android 连接有时会被拒绝(并非所有时候)

    我编写了一个 WiFi Direct 代码连接并在它们之间创建了一个连接 然后我创建了一个ServerSocket在第一面和一个Socket在客户端并开始在它们之间发送数据 第一次启动应用程序时它工作成功 但是当我关闭应用程序并再次启动它时
  • UDP 广播发送失败:在 Linux 2.6.30 上“网络无法访问”

    我用udp广播写了一个程序 代码段如下 struct sockaddr in broadcast addr socklen t sock len sizeof broadcast addr bzero broadcast addr sock
  • Netty Nio java 中的通信

    我想在 Netty nio 中创建一个具有两个客户端和一个服务器的通信系统 更具体地说 首先 我希望当两个客户端与服务器连接时从服务器发送消息 然后能够在两个客户端之间交换数据 我正在使用本示例提供的代码 https github com
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept

随机推荐

  • C# 中的内存使用情况

    我有一个在 C 中使用线程的程序 有没有办法以编程方式了解应用程序的内存使用情况 我想将线程的产生限制为 10 MB 内存 我该怎么做 如果您想要整个正在运行的进程的内存而不是每个线程的内存 那么 get the current proce
  • 用于出版质量图的 Python Pylab pcolor 选项

    我正在尝试使用 DFT 离散傅立叶变换 图pcolor在Python中 我之前一直使用 Mathematica 8 0 来执行此操作 但我发现 Mathematica 8 0 中的颜色条与我尝试表示的数据具有不良的一对一相关性 例如 这是我
  • Java:使用多个 DatagramSocket 接收 UDP 数据报包

    我正在尝试实现一种将 UDP 数据包发送到多个接收者的方法 我认为这应该是可行的设置setReuseAddress true 在接收 DatagramSocket 实例上 我的问题是 在某些情况下 我需要限制与本地计算机的通信 因此限制本地
  • 如何将RGB值转换为色温?

    如何获取以 RGB 值 例如 0 255 之间的三个坐标 表示的颜色并从中生成一个色温 https en wikipedia org wiki Color temperature在开尔文 或泥潭 I see 这个问题 https stack
  • for 循环:C++ 和 python

    我了解如何使用 for 循环 for x 0 x lt 5 x some code 在 C 中 但是 for 循环怎么样 for x in y 至少存在于 python 中 最接近的等效项是基于范围的 for 循环 例如 auto y 0
  • DreamHost 上的 Rails 3?

    我想在 dreamhost 上部署一个小型 Rails 3 应用程序 仅用于测试目的 没什么大不了的 我想知道是否有人已经这样做了 请选择以下选项之一 我做到了 非常简单 方法如下 虽然我没有尝试过 但应该很容易 方法如下 这很复杂 但这应
  • 使用具有根 UITabBarController 的故事板将 ManagedObjectContext 传递给视图控制器

    使用故事板 您无法轻松访问 appDelegate 中的第一个视图控制器 尽管一旦您这样做了prepareForSegue可以轻松地将 ManagedObjectContext 传递到导航堆栈中 我决定为每个需要核心数据访问的视图控制器 或
  • 更新到 OSX 10.9.5 后如何更改 Java 应用程序的签名方式

    刚刚从 OSX 10 9 4 更新到 10 9 5 看起来我必须更改更新后签署 Java 应用程序的方式 因为我现在在签名后得到此输出 export CODESIGN ALLOCATE Applications Xcode app Cont
  • Javascript:向函数原型添加方法

    有没有更短的写法 var controller function constructor controller prototype function1 function Prototype method1 controller protot
  • 我可以/应该编辑 R.java 文件吗?如果是这样,怎么办?

    因此 我正在 Eclipse for Android 4 0 中编写一个简单的计算器 并尝试简化我的代码并使其尽可能简单 我试图清理的地方是我的 findViewById 的 因为我有按钮 0 9 来实例化 所以我有一个十行长的代码块 如下
  • 主动类与被动类

    在 UML 规范上层结构 2 5 仍为 Beta 第 203 页 中 可以通过将 isActive 设置为 true 来指定类为活动类 即 它的每个实例都是一个活动对象 当 isActive 为 false 时 类是被动的 即 它的每个实例
  • 如何嵌入PDF?

    我正在尝试将 PDF 嵌入 HTML 文档 但这似乎仅适用于 Chrome 其他浏览器似乎要么需要插件 要么要求用户单击不是我想要的链接 这是我尝试过的 nbsp alt a href pdfFiles interfaces pdf 以下是
  • 在 Python 中求解 x 的高度非线性方程

    我正在尝试求解以下 dB 方程 为简单起见 我在问题标题中将 dB 表示为 x 方程中的所有其他项都是已知的 我尝试使用 SymPy 象征性地求解 dB 但我不断收到超时错误 我也尝试过使用fminbound from scipy opti
  • 使用 Matlab 进行多线程处理

    我正在开展一个 Matlab 项目 我们必须优化性能 并且我正在考虑并行化从 m 文件进行的几个函数调用 这个想法很简单 从 Matlab 文件 m 调用编译为 MEX 的 C 文件 然后从该 C 文件创建几个线程并从每个线程回调 matl
  • 如何实现模态日期选择器?

    我正在使用埃德 马蒂回答这个问题的代码here https stackoverflow com questions 1624866 iphone sdk how to implement a modal date picker但我在一些方面
  • leetcode 逆整数——如何处理溢出

    问题是 反转整数的数字 示例1 x 123 返回321 示例2 x 123 返回 321 您是否注意到反转的整数可能会溢出 假设输入是32位整数 那么1000000003的逆序就会溢出 遇到此类情况应该如何处理 抛出异常 很好 但是如果不能
  • r 结合ggRadar和facet_wrap

    下面的代码说明了我的问题 我想在 ggiraphExtra 中使用 ggRadar 函数 因为它允许与图形交互 我想要每种营养素有一个单独的蜘蛛图 并且我希望每个蜘蛛图每年都有一组单独的连接点 据我现在了解 在 ggRadar 中 代码ma
  • JBoss 7.1.1 Http 连接超时

    我正在尝试为 JBoss 7 1 1 设置 http 连接超时 但我无法在standalone xml 中找到更改此设置的位置 有谁知道我可以在哪里更改 60 秒的默认设置吗 您可以通过系统属性配置 HTTP 连接器的连接超时 org ap
  • `__unicode__()` 添加在 Django 教程中的基本民意调查应用程序中不起作用

    在安装了 Django 的开发源以及源代码中的 PostgreSQL 以及源代码中所需的所有其他内容之后 我正在学习 Django 教程 我正在尝试在 Ubuntu 12 10 上使用 python3 而不是 python 来完成所有操作
  • Windows 7 中两个进程如何监听同一端口?

    我在 Windows 7 中运行两个 stunnel 实例 配置为侦听同一端口 并且它们似乎都成功侦听同一端口 仅使用 socket bind listen 两个实例的所有调用似乎都成功 并且它们显示在 netstat 中 C gt net