Привет, я работаю над сетевым проектом. У меня есть сокет, который прослушивает входящие данные. Теперь я хочу архивировать это: Socket получит только 100 пакетов. И есть 3-4 клиента. Они отправляют пакеты случайных данных бесконечно. Я получу 100 пакетов, а позже я их обработаю. После процесса я снова начну получать. Но в это время есть некоторые ожидающие операции send() >> recv(). Теперь я хочу отменить/отменить ожидающие операции recv. Я думаю, мы найдем данные, и мы их не обработаем. Любые другие предложения? (извините за плохой состав вопроса)
Выключите и закройте соединение. Это немедленно отменит все.
Еще лучше, заново создайте приложение и сетевой протокол, чтобы вы могли достоверно рассказать, сколько данных получить.
В Windows вы можете отменить выдающиеся результаты с помощью CancelIO, но это может привести к утере данных, если только что-то получилось, чтобы что-то прочитать.
Вы можете использовать циклы select()
или poll()
. вы можете использовать сигнал. recv()
вернется к приему сигнала, чтобы вы могли отправить сигнал от другой задачи к задаче, которая блокирует recv()
. Но вы должны убедиться, что вы не указали SA_RESTART
(см http://pubs.opengroup.org/onlinepubs/9699919799/functions/sigaction.html)
Подробнее см. Http://en.wikipedia.org/wiki/Asynchronous_I/O