Поскольку они добавляют много недостающих вещей к стандартной библиотеке, так таким образом, некоторые из них становятся включенными в стандарт.
люди Повышения не лежат:
, Почему организация должна использовать Повышение?
, Одним словом, Производительность. Использование высококачественных библиотек как начальное развитие скоростей Повышения, результаты в меньшем количестве ошибок, уменьшает reinvention-of-the-wheel и сокращает долгосрочные затраты на обслуживание. И так как библиотеки Boost склонны становиться де-факто или стандарты де-юре, многие программисты уже знакомы с ними.
Десять из библиотек Boost включены в TR1 Библиотеки Стандарта C++, и так намечены для более поздней полной стандартизации. Библиотеки More Boost готовятся для TR2. Пользование библиотеками Boost дает организации преимущество в принятии новых технологий.
Многие организация уже используют программы, реализованные с Повышением, как Adobe Acrobat Reader 7.0.
Recv будет блокироваться до тех пор, пока сокет не получит информацию для чтения, пока сокет находится в режиме блокировки, вы можете изменить это с помощью fcntl.
Если вам интересно, почему он зависает, мой Предполагаю, что когда вы закрываете канал записи на сокете (также вы можете использовать константу SHUT_WR, поскольку это лучший стиль), сервер получает EOF и предполагает, что вы отключаетесь, хотя это может быть не так, если сервер настроен для его обработки.
Я бы посоветовал изучить возможность установки сокета в неблокирующий режим, а затем вызвать select , который будет блокироваться до тех пор, пока сокет не станет доступен для чтения / записи / или не будет запущен тайм-аут . В зависимости от того, что вы делаете, это будет иметь значение.
Попробуйте использовать неблокирующий режим. т.е. recv вернется, если нет данных для чтения, поэтому обработайте этот случай (в цикле while или с помощью select. это зависит от вас)
Для получения дополнительной информации о recv, если вы используете POSIX-совместимую систему) прочтите этот http://www.opengroup.org/onlinepubs/009695399/functions/recv.html
Ммм ... почему вы отключили сокет ....
bytes_send = send(sock, a, strlen(a), 0); bytes_send = shutdown(sock, 1); /*** That I think is the problem! ***/ bytes_recieved = recv(sock, recv_data, 4096, 0);
И все же вы продолжили в коде получать данные из того же сокета, который был отключен ??
Надеюсь это намекает вам в правильном направлении, С наилучшими пожеланиями, Том.
recv
должен зависнуть до тех пор, пока вы не получите ответ от сервера, если вы заявили, что ответ отправляется.
Попробуйте wirehark или что-то в этом роде, чтобы обнюхать сеть и посмотреть, приходит ли реальный ответ или нет.
Ваш код будет блокироваться в вызове recv, пока сервер не отправит обратно какие-либо данные. Поскольку этого не происходит, возможно, вам стоит спросить себя, отправил ли ваш клиент полный запрос. Сервер, вероятно, не начнет отправлять ответ, пока не будет получен полный запрос.
Если ваш протокол клиент / сервер основан на тексте, например HTTP или SMTP, вы уверены, что ваш ответ завершен правильно? Сервер может ожидать CR + LF ('\ r \ n') вместо просто LF ('\ n') или ожидает, что пустая строка завершит запрос:
char *request = "GET /index.html HTTP/1.1\r\nHost: www.example.com\r\n\r\n";
PS. Вы не объявляете и не инициализируете "a" во фрагменте кода.