【问题标题】:exiting from a blocking select call!退出阻塞选择调用!
【发布时间】:2010-04-14 09:17:31
【问题描述】:

我正在调用第三方 API,它创建一个套接字,进行连接,然后通过传递套接字来调用 select API 以永久阻塞。

我无法访问套接字。有什么方法可以让我在不访问套接字的情况下从我的应用程序中发出选择调用?

我的平台是 Windows。

【问题讨论】:

  • 几个问题/澄清:(1)您可以修改代码中对select 的调用吗?我认为答案是“不”,但我想确定一下。 (2) 假设上一个问题的答案是“否”,您能否让第 3 方 api 在您指定的多个套接字上的 select 中等待? (3) 从您的问题来看,我不清楚您是使用两个 3rd 方 api,一个创建(并连接到?)一个套接字,另一个等待一个或多个套接字,还是一个创建、连接的 api , 并调用 select 而不将控制权返回给您。
  • 第一个问题的答案是否定的。我只使用一个第三方 API,它创建、连接和调用 select 而不将控制权返回给我。感谢您对这个问题感兴趣。

标签: c windows select sockets


【解决方案1】:

除非您可以访问所使用的套接字或选择集,否则您通常无法执行此操作。

如果您可以访问套接字,请通过closesocket() 将其关闭。 如果您可以访问读取集,请在其中填充一个虚拟套接字,然后查看上一点。

如果这些都不起作用,您可以:

  • 确保这发生在一个单独的线程中,您可以稍后将其杀死(尽管这会造成一些相当明显的资源泄漏)
  • 尝试使用 Detours 之类的内容覆盖选择(不推荐)
  • 认输。

【讨论】:

  • 我同意哈斯图昆的观点。我还会通过伪装成连接的另一端来添加向阻塞套接字发送消息的可能性。
  • 当我无法访问套接字时如何向它发送一些消息?有办法吗?谢谢!
猜你喜欢
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2016-12-29
  • 2023-01-12
  • 2015-05-05
  • 1970-01-01
  • 2013-11-16
相关资源
最近更新 更多