forked from boostorg/asio
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SVN r34306]
- Loading branch information
0 parents
commit da0cf5f
Showing
268 changed files
with
42,660 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
* text=auto !eol svneol=native#text/plain | ||
*.gitattributes text svneol=native#text/plain | ||
|
||
# Scriptish formats | ||
*.bat text svneol=native#text/plain | ||
*.bsh text svneol=native#text/x-beanshell | ||
*.cgi text svneol=native#text/plain | ||
*.cmd text svneol=native#text/plain | ||
*.js text svneol=native#text/javascript | ||
*.php text svneol=native#text/x-php | ||
*.pl text svneol=native#text/x-perl | ||
*.pm text svneol=native#text/x-perl | ||
*.py text svneol=native#text/x-python | ||
*.sh eol=lf svneol=LF#text/x-sh | ||
configure eol=lf svneol=LF#text/x-sh | ||
|
||
# Image formats | ||
*.bmp binary svneol=unset#image/bmp | ||
*.gif binary svneol=unset#image/gif | ||
*.ico binary svneol=unset#image/ico | ||
*.jpeg binary svneol=unset#image/jpeg | ||
*.jpg binary svneol=unset#image/jpeg | ||
*.png binary svneol=unset#image/png | ||
*.tif binary svneol=unset#image/tiff | ||
*.tiff binary svneol=unset#image/tiff | ||
*.svg text svneol=native#image/svg%2Bxml | ||
|
||
# Data formats | ||
*.pdf binary svneol=unset#application/pdf | ||
*.avi binary svneol=unset#video/avi | ||
*.doc binary svneol=unset#application/msword | ||
*.dsp text svneol=crlf#text/plain | ||
*.dsw text svneol=crlf#text/plain | ||
*.eps binary svneol=unset#application/postscript | ||
*.gz binary svneol=unset#application/gzip | ||
*.mov binary svneol=unset#video/quicktime | ||
*.mp3 binary svneol=unset#audio/mpeg | ||
*.ppt binary svneol=unset#application/vnd.ms-powerpoint | ||
*.ps binary svneol=unset#application/postscript | ||
*.psd binary svneol=unset#application/photoshop | ||
*.rdf binary svneol=unset#text/rdf | ||
*.rss text svneol=unset#text/xml | ||
*.rtf binary svneol=unset#text/rtf | ||
*.sln text svneol=native#text/plain | ||
*.swf binary svneol=unset#application/x-shockwave-flash | ||
*.tgz binary svneol=unset#application/gzip | ||
*.vcproj text svneol=native#text/xml | ||
*.vcxproj text svneol=native#text/xml | ||
*.vsprops text svneol=native#text/xml | ||
*.wav binary svneol=unset#audio/wav | ||
*.xls binary svneol=unset#application/vnd.ms-excel | ||
*.zip binary svneol=unset#application/zip | ||
|
||
# Text formats | ||
.htaccess text svneol=native#text/plain | ||
*.bbk text svneol=native#text/xml | ||
*.cmake text svneol=native#text/plain | ||
*.css text svneol=native#text/css | ||
*.dtd text svneol=native#text/xml | ||
*.htm text svneol=native#text/html | ||
*.html text svneol=native#text/html | ||
*.ini text svneol=native#text/plain | ||
*.log text svneol=native#text/plain | ||
*.mak text svneol=native#text/plain | ||
*.qbk text svneol=native#text/plain | ||
*.rst text svneol=native#text/plain | ||
*.sql text svneol=native#text/x-sql | ||
*.txt text svneol=native#text/plain | ||
*.xhtml text svneol=native#text/xhtml%2Bxml | ||
*.xml text svneol=native#text/xml | ||
*.xsd text svneol=native#text/xml | ||
*.xsl text svneol=native#text/xml | ||
*.xslt text svneol=native#text/xml | ||
*.xul text svneol=native#text/xul | ||
*.yml text svneol=native#text/plain | ||
boost-no-inspect text svneol=native#text/plain | ||
CHANGES text svneol=native#text/plain | ||
COPYING text svneol=native#text/plain | ||
INSTALL text svneol=native#text/plain | ||
Jamfile text svneol=native#text/plain | ||
Jamroot text svneol=native#text/plain | ||
Jamfile.v2 text svneol=native#text/plain | ||
Jamrules text svneol=native#text/plain | ||
Makefile* text svneol=native#text/plain | ||
README text svneol=native#text/plain | ||
TODO text svneol=native#text/plain | ||
|
||
# Code formats | ||
*.c text svneol=native#text/plain | ||
*.cpp text svneol=native#text/plain | ||
*.h text svneol=native#text/plain | ||
*.hpp text svneol=native#text/plain | ||
*.ipp text svneol=native#text/plain | ||
*.tpp text svneol=native#text/plain | ||
*.jam text svneol=native#text/plain | ||
*.java text svneol=native#text/plain |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
subproject libs/asio/example/allocation ; | ||
|
||
project boost : $(BOOST_ROOT) ; | ||
|
||
if $(UNIX) | ||
{ | ||
switch $(JAMUNAME) | ||
{ | ||
case SunOS* : | ||
{ | ||
SOCKET_LIBS = <find-library>socket <find-library>nsl ; | ||
} | ||
} | ||
} | ||
|
||
exe server | ||
: server.cpp | ||
: <include>$(BOOST_ROOT) | ||
<include>../../../.. | ||
<define>BOOST_ALL_NO_LIB=1 | ||
<threading>multi | ||
<mingw><*><find-library>ws2_32 | ||
<mingw><*><find-library>mswsock | ||
$(SOCKET_LIBS) | ||
; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,229 @@ | ||
#include <cstdlib> | ||
#include <iostream> | ||
#include <boost/aligned_storage.hpp> | ||
#include <boost/array.hpp> | ||
#include <boost/bind.hpp> | ||
#include <boost/enable_shared_from_this.hpp> | ||
#include <boost/noncopyable.hpp> | ||
#include <boost/shared_ptr.hpp> | ||
#include <boost/asio.hpp> | ||
|
||
using boost::asio::ip::tcp; | ||
|
||
// Class to manage the memory to be used for handler-based custom allocation. | ||
// It contains a single block of memory which may be returned for allocation | ||
// requests. If the memory is in use when an allocation request is made, the | ||
// allocator delegates allocation to the global heap. | ||
class handler_allocator | ||
: private boost::noncopyable | ||
{ | ||
public: | ||
handler_allocator() | ||
: in_use_(false) | ||
{ | ||
} | ||
|
||
void* allocate(std::size_t size) | ||
{ | ||
if (!in_use_ && size < storage_.size) | ||
{ | ||
in_use_ = true; | ||
return storage_.address(); | ||
} | ||
else | ||
{ | ||
return ::operator new(size); | ||
} | ||
} | ||
|
||
void deallocate(void* pointer) | ||
{ | ||
if (pointer == storage_.address()) | ||
{ | ||
in_use_ = false; | ||
} | ||
else | ||
{ | ||
::operator delete(pointer); | ||
} | ||
} | ||
|
||
private: | ||
// Storage space used for handler-based custom memory allocation. | ||
boost::aligned_storage<1024> storage_; | ||
|
||
// Whether the handler-based custom allocation storage has been used. | ||
bool in_use_; | ||
}; | ||
|
||
// Wrapper class template for handler objects to allow handler memory | ||
// allocation to be customised. Calls to operator() are forwarded to the | ||
// encapsulated handler. | ||
template <typename Handler> | ||
class custom_alloc_handler | ||
{ | ||
public: | ||
custom_alloc_handler(handler_allocator& a, Handler h) | ||
: allocator_(a), | ||
handler_(h) | ||
{ | ||
} | ||
|
||
template <typename Arg1> | ||
void operator()(Arg1 arg1) | ||
{ | ||
handler_(arg1); | ||
} | ||
|
||
template <typename Arg1, typename Arg2> | ||
void operator()(Arg1 arg1, Arg2 arg2) | ||
{ | ||
handler_(arg1, arg2); | ||
} | ||
|
||
friend void* asio_handler_allocate(std::size_t size, | ||
custom_alloc_handler<Handler>* this_handler) | ||
{ | ||
return this_handler->allocator_.allocate(size); | ||
} | ||
|
||
friend void asio_handler_deallocate(void* pointer, std::size_t size, | ||
custom_alloc_handler<Handler>* this_handler) | ||
{ | ||
this_handler->allocator_.deallocate(pointer); | ||
} | ||
|
||
private: | ||
handler_allocator& allocator_; | ||
Handler handler_; | ||
}; | ||
|
||
// Helper function to wrap a handler object to add custom allocation. | ||
template <typename Handler> | ||
inline custom_alloc_handler<Handler> make_custom_alloc_handler( | ||
handler_allocator& a, Handler h) | ||
{ | ||
return custom_alloc_handler<Handler>(a, h); | ||
} | ||
|
||
class session | ||
: public boost::enable_shared_from_this<session> | ||
{ | ||
public: | ||
session(boost::asio::io_service& io_service) | ||
: socket_(io_service) | ||
{ | ||
} | ||
|
||
tcp::socket& socket() | ||
{ | ||
return socket_; | ||
} | ||
|
||
void start() | ||
{ | ||
socket_.async_read_some(boost::asio::buffer(data_), | ||
make_custom_alloc_handler(allocator_, | ||
boost::bind(&session::handle_read, | ||
shared_from_this(), | ||
boost::asio::placeholders::error, | ||
boost::asio::placeholders::bytes_transferred))); | ||
} | ||
|
||
void handle_read(const boost::asio::error& error, size_t bytes_transferred) | ||
{ | ||
if (!error) | ||
{ | ||
boost::asio::async_write(socket_, | ||
boost::asio::buffer(data_, bytes_transferred), | ||
make_custom_alloc_handler(allocator_, | ||
boost::bind(&session::handle_write, | ||
shared_from_this(), | ||
boost::asio::placeholders::error))); | ||
} | ||
} | ||
|
||
void handle_write(const boost::asio::error& error) | ||
{ | ||
if (!error) | ||
{ | ||
socket_.async_read_some(boost::asio::buffer(data_), | ||
make_custom_alloc_handler(allocator_, | ||
boost::bind(&session::handle_read, | ||
shared_from_this(), | ||
boost::asio::placeholders::error, | ||
boost::asio::placeholders::bytes_transferred))); | ||
} | ||
} | ||
|
||
private: | ||
// The socket used to communicate with the client. | ||
tcp::socket socket_; | ||
|
||
// Buffer used to store data received from the client. | ||
boost::array<char, 1024> data_; | ||
|
||
// The allocator to use for handler-based custom memory allocation. | ||
handler_allocator allocator_; | ||
}; | ||
|
||
typedef boost::shared_ptr<session> session_ptr; | ||
|
||
class server | ||
{ | ||
public: | ||
server(boost::asio::io_service& io_service, short port) | ||
: io_service_(io_service), | ||
acceptor_(io_service, tcp::endpoint(tcp::v4(), port)) | ||
{ | ||
session_ptr new_session(new session(io_service_)); | ||
acceptor_.async_accept(new_session->socket(), | ||
boost::bind(&server::handle_accept, this, new_session, | ||
boost::asio::placeholders::error)); | ||
} | ||
|
||
void handle_accept(session_ptr new_session, const boost::asio::error& error) | ||
{ | ||
if (!error) | ||
{ | ||
new_session->start(); | ||
new_session.reset(new session(io_service_)); | ||
acceptor_.async_accept(new_session->socket(), | ||
boost::bind(&server::handle_accept, this, new_session, | ||
boost::asio::placeholders::error)); | ||
} | ||
} | ||
|
||
private: | ||
boost::asio::io_service& io_service_; | ||
tcp::acceptor acceptor_; | ||
}; | ||
|
||
int main(int argc, char* argv[]) | ||
{ | ||
try | ||
{ | ||
if (argc != 2) | ||
{ | ||
std::cerr << "Usage: server <port>\n"; | ||
return 1; | ||
} | ||
|
||
boost::asio::io_service io_service; | ||
|
||
using namespace std; // For atoi. | ||
server s(io_service, atoi(argv[1])); | ||
|
||
io_service.run(); | ||
} | ||
catch (boost::asio::error& e) | ||
{ | ||
std::cerr << e << "\n"; | ||
} | ||
catch (std::exception& e) | ||
{ | ||
std::cerr << "Exception: " << e.what() << "\n"; | ||
} | ||
|
||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
subproject libs/asio/example/buffers ; | ||
|
||
project boost : $(BOOST_ROOT) ; | ||
|
||
if $(UNIX) | ||
{ | ||
switch $(JAMUNAME) | ||
{ | ||
case SunOS* : | ||
{ | ||
SOCKET_LIBS = <find-library>socket <find-library>nsl ; | ||
} | ||
} | ||
} | ||
|
||
exe server | ||
: reference_counted.cpp | ||
: <include>$(BOOST_ROOT) | ||
<include>../../../.. | ||
<define>BOOST_ALL_NO_LIB=1 | ||
<threading>multi | ||
<mingw><*><find-library>ws2_32 | ||
<mingw><*><find-library>mswsock | ||
$(SOCKET_LIBS) | ||
; |
Oops, something went wrong.