2010-04-14 2 views
0

Я вызываю сторонний API, который создает сокет, подключается, а затем вызывает select API, передавая сокет для блокировки навсегда.выход из блокирующего вызова выбора!

У меня нет доступа к розетке. Есть ли способ, по которому я могу сделать вызов select из моего приложения без доступа к сокету?

Моя платформа - Windows.

+0

Пара вопросов/разъяснений: (1) Является ли вызов 'select' в коде, который вы можете изменить? Я * думаю * ответ «нет», но я хочу убедиться. (2) Предполагая, что ответ на предыдущий вопрос «нет», вы можете заставить стороннюю api ждать в 'select' на нескольких сокетах, которые вы указали? (3) С вашего вопроса мне непонятно, используете ли вы два сторонних apis, один для создания (и подключения к?) Сокета, а другой - для ожидания одного или нескольких сокетов или одного api, который создает , соединяется и вызывает 'select', не возвращая вам управление. –

+0

Ответ на ваш первый вопрос: Нет. Я использую только один сторонний API, который создает, подключает и вызывает выбор, не возвращая мне контроль. Спасибо за ваш интерес к вопросу. – Jay

ответ

1

Обычно вы не можете это сделать, если не имеете доступа к сокету или используемому набору выбора.

Если вы можете получить доступ к сокету, закройте его с помощью closesocket(). Если вы можете получить доступ к считываемому набору, введите там фиктивный сокет, а затем посмотрите предыдущую точку.

Если ни один из них не работает, вы можете:

  • Обеспечить это происходит в отдельном потоке, который впоследствии можно убить (хотя это создаст некоторые довольно очевидные утечки ресурсов)
  • Попытка переопределения выберите используя что-то вроде Detours (не рекомендуется)
  • Признать поражение.
+0

Я согласен с Хастуркун. Я бы также добавил возможность отправки блокирующего сокета сообщения, притворившись другим концом соединения. –

+0

Как отправить сообщение, если у меня нет доступа к сокету? Есть ли способ? Благодаря! – Jay

Смежные вопросы