You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
3.7 KiB
C++
152 lines
3.7 KiB
C++
// Copyright (C) 2006 Davis E. King (davis@dlib.net)
|
|
// License: Boost Software License See LICENSE.txt for the full license.
|
|
#ifndef DLIB_SOCKETS_EXTENSIONs_
|
|
#define DLIB_SOCKETS_EXTENSIONs_
|
|
|
|
#include <iosfwd>
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include "../sockets.h"
|
|
#include "../smart_pointers/scoped_ptr.h"
|
|
#include "sockets_extensions_abstract.h"
|
|
|
|
|
|
namespace dlib
|
|
{
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
class invalid_network_address : public dlib::error
|
|
{
|
|
public:
|
|
invalid_network_address(const std::string& msg) : dlib::error(msg) {};
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
struct network_address
|
|
{
|
|
network_address() : port(0){}
|
|
|
|
network_address(
|
|
const std::string& full_address
|
|
);
|
|
|
|
network_address (
|
|
const char* full_address
|
|
)
|
|
{
|
|
*this = network_address(std::string(full_address));
|
|
}
|
|
|
|
network_address(
|
|
const std::string& host_address_,
|
|
const unsigned short port_
|
|
) : host_address(host_address_), port(port_) {}
|
|
|
|
std::string host_address;
|
|
unsigned short port;
|
|
};
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
inline bool operator < (
|
|
const network_address& a,
|
|
const network_address& b
|
|
)
|
|
{
|
|
if (a.host_address < b.host_address)
|
|
return true;
|
|
else if (a.host_address > b.host_address)
|
|
return false;
|
|
else if (a.port < b.port)
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
inline bool operator== (
|
|
const network_address& a,
|
|
const network_address& b
|
|
) { return a.host_address == b.host_address && a.port == b.port; }
|
|
|
|
inline bool operator != (
|
|
const network_address& a,
|
|
const network_address& b
|
|
) { return !(a == b); }
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void serialize(
|
|
const network_address& item,
|
|
std::ostream& out
|
|
);
|
|
|
|
void deserialize(
|
|
network_address& item,
|
|
std::istream& in
|
|
);
|
|
|
|
std::ostream& operator<< (
|
|
std::ostream& out,
|
|
const network_address& item
|
|
);
|
|
|
|
std::istream& operator>> (
|
|
std::istream& in,
|
|
network_address& item
|
|
);
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
connection* connect (
|
|
const std::string& host_or_ip,
|
|
unsigned short port
|
|
);
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
connection* connect (
|
|
const network_address& addr
|
|
);
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
connection* connect (
|
|
const std::string& host_or_ip,
|
|
unsigned short port,
|
|
unsigned long timeout
|
|
);
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
bool is_ip_address (
|
|
std::string ip
|
|
);
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void close_gracefully (
|
|
connection* con,
|
|
unsigned long timeout = 500
|
|
);
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
void close_gracefully (
|
|
std::unique_ptr<connection>& con,
|
|
unsigned long timeout = 500
|
|
);
|
|
|
|
// ----------------------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
#ifdef NO_MAKEFILE
|
|
#include "sockets_extensions.cpp"
|
|
#endif
|
|
|
|
#endif // DLIB_SOCKETS_EXTENSIONs_
|
|
|