select.select() 没有捕获套接字上的异常条件?

2024-04-18

Python 2.7、Windows XP。我有一个向客户端发送消息的服务器。我使用 select 模块来检查套接字是否准备好接收,以及捕获异常情况。我的印象是,如果客户端关闭了套接字, select() 会在异常条件套接字列表中返回所述套接字,但它似乎没有这样做:

lin, lout, lex = select.select(socklist, socklist, socklist)
for sock in lin: 
    # handle incoming messages
for sock in lout: 
    # send updates
for sock in lex: 
    # shut down server-side objects for particular client

服务器确定客户端是否仍然连接的最佳方法是什么?服务器并不总是发送数据,所以我不想依赖 socket.send() 来测试客户端是否仍然存在。


关闭的套接字不是异常(错误)情况。将会发生的情况是,套接字将位于读取列表 (lin) 中,并且当您读取时,您将获得 0 字节。这意味着另一端已关闭套接字。

Update:

在正常实践中,您永远不会在 except 列表中看到任何内容,并且可以安全地忽略它。它适用于很少使用的东西,例如带外(OOB)等。

回答问题更新:

可靠且快速地检测到插座的另一端已消失可能很棘手。如果可靠、始终、及时地检测它很重要,那么您应该使用更高级别的机制,例如 keepalive/heartbeat。

如果客户端干净地关闭了套接字,那么您应该在读取列表中看到该套接字。从套接字读取将返回 0 字节,表示套接字已关闭 (EOF)。

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

select.select() 没有捕获套接字上的异常条件? 的相关文章

随机推荐

  • 如何避免跨页面拆分 HTML 表格

    请原谅我的英语 我正在打印一份 pdf 格式的大型报告 其中包括一些表格 一个又一个的表格 为此 我首先生成 html 格式的报告 然后使用dompdf http pxd me dompdf www 这是我打印一张又一张表格的方式 div
  • 对对象的引用并不更新该对象

    您好 我正在使用看起来像这样的代码 class A Custom objA public A Assign some value to objA B obj new B objA class B Custom objB public B C
  • UITableViewCell 选定行的文本颜色变化

    我有一个表格视图 我想知道如何更改所选行的文本颜色 例如 Red 我尝试通过这段代码 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath NSIndex
  • 如何在 Visual Studio 2015 中创建新分支?

    我在 Visual Studio 2015 中将 Git 与 Visual Studio Online 结合使用 并试图弄清楚如何创建分支 这是网上常见的答案 https msdn microsoft com en us library h
  • 由于地理位置邻近公式(商店定位器)而导致结果缺失

    好的 我已经断断续续地与这个问题斗争了大约 3 个月 因为我已经用尽了我遇到的所有地理邻近公式 但我距离获得正确的结果还差得很远 我认为是时候了寻求帮助 THE AIM 我正在设置一个相当基本的商店定位器实现 用户输入邮政编码并从预定义的搜
  • Vue.use() 抛出“无法读取未定义的属性‘use’”

    尝试1 main js import createApp from vue import store from store store import App from App vue Vue config productionTip fal
  • 对列表进行排序,使特定值位于顶部

    我有课Offer其中包含一个已归档的类别 我希望特定类别的所有优惠都显示在顶部 然后是其他所有优惠 我试过了 但没有效果 你有什么推荐的吗 Offers Offers OrderBy x gt x Category Corporate To
  • 迭代多级提升树

    我的树看起来像这样 Library L ID 1 Book B ID 1 Title Moby Dick Book B ID 2 Title Jurassic Park Library L ID 2 Book B ID 1 Title Ve
  • Android 为 FLAG_TRANSLUCENT 禁用 ActionBar 和 NavigationBar 的叠加

    如图所示 导航栏和状态栏重叠布局 我所做的只是 if Build VERSION SDK INT gt Build VERSION CODES KITKAT Window w getWindow w setFlags WindowManag
  • 结合 EditText 和 Button?

    在某些应用程序中 我看到 EditText 小部件与右侧的按钮结合在一起 例如Twitter 应用程序中的搜索字段 http 2 bp blogspot com GTM W5mVPTU S rmYdiUTCI AAAAAAAAAEE hIO
  • 使用 alembic 自动生成时忽略模型

    我正在尝试使用自动生成数据库的修订版本alembic 这样做时 我想忽略一些模型 它们具有当前版本的 MySQL 不支持的数据类型 这是我尝试过的方法 似乎工作正常 但我不确定这是最惯用的方法 inside alembic env py d
  • Eclipse RCP - 创建视图后立即添加侦听器

    问候 Stackoverflow 的同胞们 我正在开发 Eclipse RCP 应用程序 并且必须添加SelectionListener to the Project Explorer view创建后的那一刻 我意识到我无法在我的贡献插件的
  • Android:活动对话框/对话框意外消失

    我有一个申请TabActivity每次从引擎 NDK C 代码 收到回调时 我都会在其中显示一个对话框 我确保当应用程序处于恢复状态时显示对话框 收到引擎的回调后 我启动NetworkDownDialog活动 但这会导致对话框停留一秒钟然后
  • 如何将 NHibernate 与 System.Tuple 等不可变类型一起使用?

    我有一个复合映射使用System Tuple
  • 为什么LogCat充满了错误?

    我尝试让 Android 应用程序消除任何错误 我绝对确定 这些都不是我的错误 当然 可能会有不同的系统信息消息 但我将日志级别设置为 警告 之后我仍然看到很多字符串 它们同时填充日志窗口 举个例子 01 21 20 47 13 336 4
  • Ruby 中什么计算结果为 false?

    false and nil评估为false in Ruby 还要别的吗 请提供官方 权威参考文献的链接 2 0 0p247 001 gt if true puts TRUE else puts FALSE end TRUE 2 0 0p24
  • 如何实现xxx.domainname.com URL模式?

    考虑 blogspot com 的情况 域名只是一个 blogspot com 但假设我用 xxx 注册 那么我将拥有 xxx blogspot com 这里它不会是子域名 我可以闻到 但是它有些不同 如何实现这一点 在 j2ee Web
  • 如何比较 Python 中的版本号?

    我正在遍历一个包含鸡蛋的目录 将这些鸡蛋添加到sys path 如果目录中有同一个 egg 的两个版本 我只想添加最新的一个 我有一个正则表达式r P
  • 使用 React JS 和 Laravel 处理多个图像上传

    我想通过reactjs中的axios将多个图像上传到数据库 将数据从客户端发送到服务器端 并在服务器端使用laravel处理图像上传 我的问题是 每当我尝试在服务器端处理多个图像时 它都不起作用 这是我的代码 客户端 ReactJS 建设者
  • select.select() 没有捕获套接字上的异常条件?

    Python 2 7 Windows XP 我有一个向客户端发送消息的服务器 我使用 select 模块来检查套接字是否准备好接收 以及捕获异常情况 我的印象是 如果客户端关闭了套接字 select 会在异常条件套接字列表中返回所述套接字