Товарищи, помогите, уже не знаю, что тут можно сделать. Имею TCP соединение и boost::asio для работы с ним. Жду клиента на подключение с помощью метода
boost::asio::ip::tcp::acceptor::accept()
boost::thread::interrupt()
boost::thread::join()
Один и тот же код компилировался под двумя операционными системами.
Под виндой cancel вываливает ошибку, мол не поддерживается этот метод для данного типа сокета, однако close() возвращает управление из accept().
Под линуксом cancel() ошибок не выдает и ничего не делает, а close() выдает bad file descriptor и управление из accept() не возвращается.
Асинхронные сокеты не предлагать. Нужную железяку для тестирования трудно достать, а текущее синхронное соединение уже проверено.
Это баг или существуют другие способы возврата управления из синхронного акцептора под линуксом?