7 #include <sys/socket.h> 8 #include <netinet/in.h> 40 _client_descriptors.resize(0);
41 _client_addys.resize(0);
50 const std::vector<struct sockaddr_in> &
ClientAddresses()
const {
return(_client_addys); };
53 _server_descriptor = socket(AF_INET,SOCK_STREAM,0);
54 if(_server_descriptor < 0){
55 perror(
"sys::net::Server::SimpleInit::socket");
63 int retval = bind(_server_descriptor,reinterpret_cast<const sockaddr *>(&
_server_addy),
64 sizeof(
struct sockaddr_in));
66 perror(
"sys::net::Server::SimpleInit::bind");
69 if(listen(_server_descriptor,1)){
70 perror(
"sys::net::Server::SimpleInit::listen");
77 struct sockaddr_in client_addy;
78 socklen_t addysize =
sizeof(
struct sockaddr_in);
79 int new_descriptor = accept(_server_descriptor,reinterpret_cast<sockaddr *>(&client_addy),
81 if(new_descriptor < 0){
82 if((errno != EAGAIN) || (errno != EWOULDBLOCK))
83 perror(
"sys::net::Server::accept");
86 _client_descriptors.push_back(new_descriptor);
87 _client_addys.push_back(client_addy);
89 return(new_descriptor);
93 std::vector<int>::iterator fdi = _client_descriptors.begin();
94 while(fdi != _client_descriptors.end())
109 std::memset(&
_server_addy,0,
sizeof(
struct sockaddr_in));
114 const struct sockaddr_in ServerAddresss() const {
return(
_server_addy); };
115 int Connect(
const std::string &server_address,
int port = 0)
119 _descriptor = socket(AF_INET,SOCK_STREAM,0);
121 perror(
"sys::net::Client::Connect::socket");
126 int retval = inet_pton(AF_INET,server_address.c_str(),&
_server_addy.sin_addr);
128 perror(
"sys::net::Client::Connect::inet_pton");
131 else if(retval == 0){
132 std::cerr <<
"sys::net::Client::Connect::inet_pton: Invalid address: " 133 << server_address << std::endl;
136 if(connect(_descriptor,reinterpret_cast<const sockaddr *>(&
_server_addy),
137 sizeof(
struct sockaddr_in)) < 0){
138 perror(
"sys::net::Client::Connect::connect");
143 int Close() {
if(_descriptor > 0) close(_descriptor);
return(0);};
int SimpleInit(int port=0)
std::vector< struct sockaddr_in > & ClientAddresses()
struct sockaddr_in & ServerAddress()
std::vector< int > _client_descriptors
int Connect(const std::string &server_address, int port=0)
const std::vector< int > & ClientDescriptors() const
Defines MPI-specific parallel global and program classes.
std::vector< struct sockaddr_in > _client_addys
struct sockaddr_in & Address()
std::vector< int > & ClientDescriptors()
const std::vector< struct sockaddr_in > & ClientAddresses() const
struct sockaddr_in _server_addy