Используйте pthread_cancel
в теме.Вам нужно убедиться, что вы установили соответствующие обработчики отмены (pthread_cleanup_push
), чтобы избежать утечек ресурсов, и вам следует отключить отмену, за исключением продолжительности вызова accept
, чтобы избежать условий гонки, когда запрос отмены может быть выполненпозже другой функцией, отличной от accept
.
Обратите внимание, что из-за ошибок в реализации отмены в glibc этот подход может привести к потере соединений и утечкам дескриптора файла.Это связано с тем, что glibc / NPTL не дает никаких гарантий, что accept
еще не завершил выполнение и не выделил новый файловый дескриптор для нового соединения до того, как был выполнен запрос на отмену.Это должно быть довольно редкое явление, но это все еще проблема для рассмотрения ...
См .: http://sourceware.org/bugzilla/show_bug.cgi?id=12683
и для обсуждения проблемы: Реализация отменяемых системных вызовов в пользовательском пространстве