21 Mart 2017 Salı

asio stream_protocol

Giriş
Şu satırı dahil ederiz.
#include <boost/asio.hpp>
Bu sınıf Linux'taki socketpair() ile aynıdır. fork() ile yapılan IPC için kullanılır.

Constructor
Şöyle yaparız.
using boost::asio::local::stream_protocol;

boost::asio::io_service ios;

stream_protocol::socket parentSocket(ios);
stream_protocol::socket childSocket(ios);
Kullanım
İki socket birbirine bağlanır. Şöyle yaparız.
//create socket pair
boost::asio::local::connect_pair(childSocket, parentSocket);
fork() çağrısı yapılır. Şöyle yaparız.
std::string request("Dad I am your child, hello!");
std::string dadRequest("Hello son!");

//Create child process
pid_t pid = fork();
if( pid < 0 ){
  std::cerr << "fork() erred\n";
} else if (pid == 0 ) { //child process
  parentSocket.close(); // no need of parents socket handle,
  boost::asio::write(childSocket, boost::asio::buffer(request)); //Send data

  std::vector<char> dadResponse(dadRequest.size(),0);
  boost::asio::read(childSocket, boost::asio::buffer(dadResponse)); //Wait

  std::cout << "Dads response: ";
  std::cout.write(&dadResponse[0], dadResponse.size());
  std::cout << std::endl;


} else { //parent
  childSocket.close(); //Close childSocket here use one bidirectional socket
  std::vector<char> reply(request.size());
  boost::asio::read(parentSocket, boost::asio::buffer(reply)); //Wait for child

  std::cout << "Child message: ";
  std::cout.write(&reply[0], request.size());
  std::cout << std::endl;

  sleep(5); //Add 5 seconds delay before sending response
  boost::asio::write(parentSocket, boost::asio::buffer(dadRequest)); //Send

}

Hiç yorum yok:

Yorum Gönder