En utilisant boost 1.4.2 asio dans une application c + + et obtenir des avertissements linux compilateur je ne grok pas.boost asio ssl flux socket compilation problème
toujours là?
L'application sur laquelle je travaille a besoin d'une "socket" qui pourrait être une socket ssl ou une socket tcp régulière afin de cacher les spécificités derrière une classe "socket" de template qui prend soit une classe socket ssl soit tcp socket class comme paramètre de modèle - ci-dessous est le code de classe ssl.
L'application fonctionne correctement sans optimisation activée; le problème est quand je compile sous linux g ++ 4.4.1 et activez l'optimisation à -02 ou supérieur, l'indicateur -fstrict-aliasing est activé. Compiler résultats dans les avertissements stricts d'aliasing le long des lignes de: « avertissement: déréférencement pointeur de type punned cassera des règles strictes-aliasing » partout où je déréférencer (poignée de main par exemple _psock->) _psock
Je voudrais savoir pourquoi cet avertissement est émis, et indique t-il un problème de conception ...
class socket_ssl_cli
{
public:
typedef ba::ssl::stream<ba::ip::tcp::socket> socket_type;
socket_ssl_cli(ba::io_service& io_svc, SocketConfig & sockcfg)
: _io_svc(io_svc)
, _ctxt(_io_svc, ba::ssl::context::tlsv1)
, _psock(0)
{
try {
// the one and only ssl context
// hardcoded for test, but get these values from config
_ctxt.set_options(ba::ssl::context::default_workarounds |
ba::ssl::context::verify_none);
_psock = new socket_type(_io_svc, _ctxt);
} catch (bs::system_error & x) {
throw std::runtime_error(x.code().message());
}
}
~socket_ssl_cli()
{
if (_psock) {
bs::error_code ec;
close_socket(ec);
delete _psock;
}
}
socket_type & raw_socket() { return *_psock; }
void setup(bs::error_code & ec)
{
_psock->handshake(ba::ssl::stream_base::client, ec);
}
void close_socket(bs::error_code & ec)
{
// shut down ssl, then shutdown socket, then close socket
_psock->shutdown(ec);
_psock->lowest_layer().shutdown(ba::socket_base::shutdown_both, ec);
_psock->lowest_layer().close(ec);
}
private:
ba::io_service & _io_svc;
ba::ssl::context _ctxt;
socket_type * _psock;
};
toute la sortie douloureuse avec la compilation -02 activé, ce qui se traduit par -fstrict-aliasing
../. ./../../third-party/boost/1.42.0/boost/function/function_base.hpp : 321: warning: le pointeur déréférencé de type puni va rompre les règles d'alias strictes ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:325: warning : le pointeur déréférencé par type punira les règles d'alias strictes ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp: Dans la fonction de membre statique 'static void boost :: detail :: fonction :: functor_manager_common :: manage_small (const boost :: détail :: function :: function_buffer &, boost :: detail :: function :: function_buffer &, boost :: detail :: fonction :: functor_manager_operation_type) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi :: list1>> *>>>] ': ../../../../third-party/boost/ 1.42.0/boost/function/function_base.hpp: 360: instancié à partir de 'static void boost :: détail :: function :: functor_manager :: manager (const boost :: detail :: fonction :: function_buffer &, boost :: detail :: function :: function_buffer &, boost :: detail :: fonction :: functor_manager_operation_type, mpl _ :: true_) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi: : list1>> *>>>] ' ../../../../third-party/boost/1.42.0/boost/function/function_base.hpp:406: instancié à partir de' static void boost: : detail :: function :: functor_manager :: gestionnaire (const boost :: détail :: function :: function_buffer &, boost :: detail :: fonction :: function_buffer &, boost :: detail :: function :: functor_manager_operation_type, boost: : detail :: function :: function_obj_tag) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi :: list1>> *>>>] ' ../../../. ./third-party/boost/1.42.0/boost/function/function_base.hpp:434: instancié à partir de 'static void boost :: détail :: function :: functor_manager :: manage (const boost :: detail :: function: : funct ion_buffer &, boost :: detail :: function :: function_buffer &, boost :: detail :: function :: functor_manager_operation_type) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi :: list1>> *>>>] ' ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:913: instancié à partir de' void boost :: function0 :: assign_to (Functor) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi :: liste1>> *>>>, R = int] ' ../../../../ third-party/boost/1.42.0/boost/function/function_template.hpp: 722: instancié à partir de 'boost :: function0 :: function0 (Functor, nom de type boost :: enable_if_c :: type) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi :: liste1>> *>>>, R = int] ' ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp: 1064: instancié à partir de 'boost :: function :: function (Functor, type de fichier boost :: enable_if_c :: type) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi :: list1>> *>>>, R = int] ' ../../../../third-party/boost/1.42.0/boost/function/function_template.hpp:1105: instancié à partir de' typename boost :: enable_if_c &> :: type boost :: function :: opérateur = (Functor) [avec Functor = boost :: _ bi :: bind_t>>>, boost :: _ bi :: liste1>> *>>>, R = int] ' ../../../../third-party/boost/1.42.0/boost/asio/ssl/detail/openssl_operation.hpp:134: instancié à partir de' boost :: asio :: ssl :: detail :: openssl_operation :: openssl_operation (boost :: asio :: ssl :: détail :: ssl_primitive_func, flux &, boost :: asio :: ssl :: détail :: net_buffer &, SSL *, BIO *) [avec Stream = boost :: asio :: basic_stream_socket>] ' ../../../../third-party/boost/1.42. 0/boost/asio/ssl/détail/openssl_stream_service.hpp: 510: instancié à partir de 'boost :: system :: code_erreur boost :: asio :: ssl :: détail :: openssl_stream_service :: handshake (boost :: asio :: ssl :: detail :: openssl_stream_service :: impl_struct * &, flux &, boost :: asio :: ssl :: flux_base :: type handshake, boost :: system :: code_erreur &) [avec Stream = boost :: asio :: basic_stream_socket> ] ' ../../../../third-party/boost/1.42.0/boost/asio/ssl/stream_service.hpp:100: instancié à partir de' boost :: system :: error_code boost :: asio :: ssl :: stream_service :: poignée de main (boost :: asio :: ssl :: détail :: openssl_stream_service :: impl_struct * &, flux &, boost :: asio :: ssl :: stream_base :: handshake_type, boost :: system :: error_code &) [avec Stream = boost :: asio :: basic_stream_socket>] ' .. /../../../third-party/boost/1.42.0/boost/asio/ssl/stream.hpp:207: instancié à partir de 'boost :: system :: error_code boost :: asio :: ssl: : stream :: handshake (boost :: asio :: ssl :: flux_base :: handshake_type, boost :: system :: code_erreur &) [avec Stream = boost :: asio :: basic_stream_socket>, Service = boost :: asio :: ssl :: stream_service] » ../sockets/socket_ssl_cli.h:45: instancié d'ici