Erreur d’exécution de l’exemple d’E / S asynchrone boost

Récemment, j’ai besoin de travailler avec boost TCP iostream, j’ai donc essayé de comstackr le serveur de jour et le client dans iostream exemple d’E / S asynchrones boost (v1.50.0) avec g ++ 4.6 sur Ubuntu 12.04 et MSVC 11.0 (Visual Studio 2012 RC) sur Windows 7. Le programme comstack et s’exécute comme prévu sous Linux. À partir de cela, nous pouvons déduire que le code source de l’exemple boost est complètement correct, donc je ne passe pas ici pour faire court. En outre, tous les parameters du projet MSVC et le lien pour améliorer les fichiers binarys sont corrects, car il comstack bien avec seulement l’avertissement C4250 qui, selon Microsoft, est correct.

Le problème est que le serveur et le client se bloquent à l’exécution sous Windows et que l’erreur ressemble à 0x000007FEEE9082DE (msvcp110d.dll) (***.exe) unhandled exception: 0xC00000FD: Stack overflow (arguement: 0x0000000000000001, 0x00000000000C3FF0) dans le débogage.

Lorsque j’ai quitté le serveur en arrière-plan et que j’étais en train de déboguer le client, une trace de la stack entrer la description de l'image ici a montré la stack d’appel. J’ai creusé dans la source de stream et trouvé que dans le constructeur de la sentry dans basic_ostream

 explicit __CLR_OR_THIS_CALL sentry(_Myt& _Ostr) : _Sentry_base(_Ostr) { // construct locking and testing stream if (_Ostr.good() && _Ostr.tie() != 0) _Ostr.tie()->flush(); _Ok = _Ostr.good(); // store test only after flushing tie } 

y a-t-il un appel _Ostr.tie()->flush() et en définition de flush()

 _Myt& __CLR_OR_THIS_CALL flush() { // flush output stream if (_Myios::rdbuf() != 0) { // buffer exists, flush it const sentry _Ok(*this); if (_Ok && _Myios::rdbuf()->pubsync() == -1) _Myios::setstate(ios_base::badbit); // sync failed } return (*this); } 

construit une sentinelle constante _Ok . Je suppose que c’est un bug mais je n’en suis pas certain.

Donc, mes questions sont les suivantes: est-ce un bug de l’exécution de MSVC 11.0 à votre avis? Le serveur ou le client, s’il est compilé avec MSVC 10.0 (Visual Studio 2010), se bloque-t-il sur votre système Windows pour la même raison?