Boost::Asio notify the server when message arrival in async mode












0














I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!



typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);

void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}

char buffer_[1000];

void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{

cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}

});
}


void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);

}

Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}


int main() {
auto p=wait();
context.run();
return 0;
}









share|improve this question


















  • 1




    I recommend that you check out the boost::asio examples. The async_tcp_echo_server would be a good starting point.
    – kenba
    Nov 20 '18 at 11:28
















0














I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!



typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);

void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}

char buffer_[1000];

void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{

cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}

});
}


void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);

}

Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}


int main() {
auto p=wait();
context.run();
return 0;
}









share|improve this question


















  • 1




    I recommend that you check out the boost::asio examples. The async_tcp_echo_server would be a good starting point.
    – kenba
    Nov 20 '18 at 11:28














0












0








0







I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!



typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);

void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}

char buffer_[1000];

void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{

cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}

});
}


void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);

}

Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}


int main() {
auto p=wait();
context.run();
return 0;
}









share|improve this question













I am using the Boost::asio, I set up a server and client, when the server accept the socket, the client may send message not immediately, I hope the server will be blocked to wait the message arrival , I know that read may copy the info, but I just want to be notified only, and I will copy to specific object later.
so could anyone told me how to be notified when message comes from client, or is there anything unreasonable in my code,please correct me and show the standard implementation of this kind of server,thanks a lot!



typedef boost::shared_ptr<tcp::socket> Ptr_socket;
void handle_accept(Ptr_socket sock, const boost::system::error_code &err);
boost::asio::io_context context;
tcp::endpoint ep(tcp::v4(), 2001);
tcp::acceptor acceptor(context, ep);

void start_accept(Ptr_socket sock) {
acceptor.async_accept(*sock, boost::bind(handle_accept, sock, _1));
}

char buffer_[1000];

void read(Ptr_socket sock)
{
sock->async_read_some(boost::asio::buffer(buffer_),
[sock](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{

cout << buffer_[0] << "succeed receive n";
read(sock);
}
else
{
cout << ec;
}

});
}


void handle_accept(Ptr_socket sock, const boost::system::error_code &err) {
if (err) return;
printf("succeed connectn");
read(sock);

}

Ptr_socket wait()
{
Ptr_socket p_sock(new tcp::socket(context));
start_accept(p_sock);
context.run(); //a kind of thread.join();
return p_sock;
}


int main() {
auto p=wait();
context.run();
return 0;
}






c++ boost boost-asio tcp-ip






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 '18 at 10:53









Gordon

776




776








  • 1




    I recommend that you check out the boost::asio examples. The async_tcp_echo_server would be a good starting point.
    – kenba
    Nov 20 '18 at 11:28














  • 1




    I recommend that you check out the boost::asio examples. The async_tcp_echo_server would be a good starting point.
    – kenba
    Nov 20 '18 at 11:28








1




1




I recommend that you check out the boost::asio examples. The async_tcp_echo_server would be a good starting point.
– kenba
Nov 20 '18 at 11:28




I recommend that you check out the boost::asio examples. The async_tcp_echo_server would be a good starting point.
– kenba
Nov 20 '18 at 11:28












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391420%2fboostasio-notify-the-server-when-message-arrival-in-async-mode%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes
















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.





Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


Please pay close attention to the following guidance:


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53391420%2fboostasio-notify-the-server-when-message-arrival-in-async-mode%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

If I really need a card on my start hand, how many mulligans make sense? [duplicate]

Alcedinidae

Can an atomic nucleus contain both particles and antiparticles? [duplicate]