Giriş
Şu satırı dahil ederiz.
Constructor
Şöyle yaparız.
İki socket birbirine bağlanır. Şöyle yaparız.
Ş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