Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Закрытие connect(а)


Автор: SVN74 24.7.2012, 10:27
Доброго времени суток!
Подскажите пожалуйста как мне закрыть (блокирующий) connect досрочно (это необходимо для быстрого закрытия программы) , к примеру как в браузер(ах) ?   

Автор: boostcoder 24.7.2012, 10:40
использовать http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/reference/basic_stream_socket/async_connect.html ;)

Автор: SVN74 24.7.2012, 11:23
Цитата(boostcoder @  24.7.2012,  10:40 Найти цитируемый пост)
использовать async_connect() ;)

Идея хорошая, но проблема в том, что в программе уже все реализовано на обычных (блокирующих) WinSoket(ах), - моя задача просто быстро закрыть программу.  

Автор: boostcoder 24.7.2012, 12:58

ну так замени на asio.
либо используй asio сокет и асинхронный коннект, а все остальное оставь как прежде. благо, asio::socket http://www.boost.org/doc/libs/1_50_0/doc/html/boost_asio/reference/basic_stream_socket/native_handle.html.

зы
я хз, почему программисты сами создают себе проблемы smile 

Автор: feodorv 24.7.2012, 15:16
Не помню точно, как я когда-то решал подобную проблему, но можно попробовать закрыть сокет через closesocket (или просто close на юниксах) из другого потока...

Цитата(SVN74 @  24.7.2012,  11:27 Найти цитируемый пост)
как мне закрыть (блокирующий) connect

А приложение в добавок однопоточное?

Конечно, boostcoder прав. Нужен неблокирующий сокет. Если вся программа уже настроена на блокирующий сокет, то, по крайней мере, connect можно реализовать с помощью неблокируемого сокета, а затем перевести его обратно в блокирующее состояние через ioctlsocket( FIONBIO ) или аналогом, если дело происходит не на виндах.

Автор: SVN74 24.7.2012, 20:06
Всем спасибо, просто сделаю неблокирующий connect.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)