summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/sockets
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/dlib/sockets')
-rw-r--r--ml/dlib/dlib/sockets/posix.h6
-rw-r--r--ml/dlib/dlib/sockets/sockets_extensions.cpp341
-rw-r--r--ml/dlib/dlib/sockets/sockets_extensions.h151
-rw-r--r--ml/dlib/dlib/sockets/sockets_extensions_abstract.h300
-rw-r--r--ml/dlib/dlib/sockets/sockets_kernel_1.cpp979
-rw-r--r--ml/dlib/dlib/sockets/sockets_kernel_1.h351
-rw-r--r--ml/dlib/dlib/sockets/sockets_kernel_2.cpp1109
-rw-r--r--ml/dlib/dlib/sockets/sockets_kernel_2.h396
-rw-r--r--ml/dlib/dlib/sockets/sockets_kernel_abstract.h495
-rw-r--r--ml/dlib/dlib/sockets/windows.h6
10 files changed, 0 insertions, 4134 deletions
diff --git a/ml/dlib/dlib/sockets/posix.h b/ml/dlib/dlib/sockets/posix.h
deleted file mode 100644
index d736a20d4..000000000
--- a/ml/dlib/dlib/sockets/posix.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_SOCKETS_KERNEl_1_
-#include "sockets_kernel_2.h"
-#endif
-
diff --git a/ml/dlib/dlib/sockets/sockets_extensions.cpp b/ml/dlib/dlib/sockets/sockets_extensions.cpp
deleted file mode 100644
index be08c1998..000000000
--- a/ml/dlib/dlib/sockets/sockets_extensions.cpp
+++ /dev/null
@@ -1,341 +0,0 @@
-// Copyright (C) 2006 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_SOCKETS_EXTENSIONs_CPP
-#define DLIB_SOCKETS_EXTENSIONs_CPP
-
-#include <string>
-#include <sstream>
-#include "../sockets.h"
-#include "../error.h"
-#include "sockets_extensions.h"
-#include "../timer.h"
-#include "../algs.h"
-#include "../timeout.h"
-#include "../misc_api.h"
-#include "../serialize.h"
-#include "../string.h"
-
-namespace dlib
-{
-
-// ----------------------------------------------------------------------------------------
-
- network_address::
- network_address(
- const std::string& full_address
- )
- {
- std::istringstream sin(full_address);
- sin >> *this;
- if (!sin || sin.peek() != EOF)
- throw invalid_network_address("invalid network address: " + full_address);
- }
-
-// ----------------------------------------------------------------------------------------
-
- void serialize(
- const network_address& item,
- std::ostream& out
- )
- {
- serialize(item.host_address, out);
- serialize(item.port, out);
- }
-
-// ----------------------------------------------------------------------------------------
-
- void deserialize(
- network_address& item,
- std::istream& in
- )
- {
- deserialize(item.host_address, in);
- deserialize(item.port, in);
- }
-
-// ----------------------------------------------------------------------------------------
-
- std::ostream& operator<< (
- std::ostream& out,
- const network_address& item
- )
- {
- out << item.host_address << ":" << item.port;
- return out;
- }
-
-// ----------------------------------------------------------------------------------------
-
- std::istream& operator>> (
- std::istream& in,
- network_address& item
- )
- {
- std::string temp;
- in >> temp;
-
- std::string::size_type pos = temp.find_last_of(":");
- if (pos == std::string::npos)
- {
- in.setstate(std::ios::badbit);
- return in;
- }
-
- item.host_address = temp.substr(0, pos);
- try
- {
- item.port = sa = temp.substr(pos+1);
- } catch (std::exception& )
- {
- in.setstate(std::ios::badbit);
- return in;
- }
-
-
- return in;
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- connection* connect (
- const std::string& host_or_ip,
- unsigned short port
- )
- {
- std::string ip;
- connection* con;
- if (is_ip_address(host_or_ip))
- {
- ip = host_or_ip;
- }
- else
- {
- if( hostname_to_ip(host_or_ip,ip))
- throw socket_error(ERESOLVE,"unable to resolve '" + host_or_ip + "' in connect()");
- }
-
- if(create_connection(con,port,ip))
- {
- std::ostringstream sout;
- sout << "unable to connect to '" << host_or_ip << ":" << port << "'";
- throw socket_error(sout.str());
- }
-
- return con;
- }
-
-// ----------------------------------------------------------------------------------------
-
- connection* connect (
- const network_address& addr
- )
- {
- return connect(addr.host_address, addr.port);
- }
-
-// ----------------------------------------------------------------------------------------
-
- namespace connect_timeout_helpers
- {
- mutex connect_mutex;
- signaler connect_signaler(connect_mutex);
- timestamper ts;
- long outstanding_connects = 0;
-
- struct thread_data
- {
- std::string host_or_ip;
- unsigned short port;
- connection* con;
- bool connect_ended;
- bool error_occurred;
- };
-
- void thread(void* param)
- {
- thread_data p = *static_cast<thread_data*>(param);
- try
- {
- p.con = connect(p.host_or_ip, p.port);
- }
- catch (...)
- {
- p.error_occurred = true;
- }
-
- auto_mutex M(connect_mutex);
- // report the results back to the connect() call that spawned this
- // thread.
- static_cast<thread_data*>(param)->con = p.con;
- static_cast<thread_data*>(param)->error_occurred = p.error_occurred;
- connect_signaler.broadcast();
-
- // wait for the call to connect() that spawned this thread to terminate
- // before we delete the thread_data struct.
- while (static_cast<thread_data*>(param)->connect_ended == false)
- connect_signaler.wait();
-
- connect_signaler.broadcast();
- --outstanding_connects;
- delete static_cast<thread_data*>(param);
- }
- }
-
- connection* connect (
- const std::string& host_or_ip,
- unsigned short port,
- unsigned long timeout
- )
- {
- using namespace connect_timeout_helpers;
-
- auto_mutex M(connect_mutex);
-
- const uint64 end_time = ts.get_timestamp() + timeout*1000;
-
-
- // wait until there are less than 100 outstanding connections
- while (outstanding_connects > 100)
- {
- uint64 cur_time = ts.get_timestamp();
- if (end_time > cur_time)
- {
- timeout = static_cast<unsigned long>((end_time - cur_time)/1000);
- }
- else
- {
- throw socket_error("unable to connect to '" + host_or_ip + "' because connect timed out");
- }
-
- connect_signaler.wait_or_timeout(timeout);
- }
-
-
- thread_data* data = new thread_data;
- data->host_or_ip = host_or_ip.c_str();
- data->port = port;
- data->con = 0;
- data->connect_ended = false;
- data->error_occurred = false;
-
-
- if (create_new_thread(thread, data) == false)
- {
- delete data;
- throw socket_error("unable to connect to '" + host_or_ip);
- }
-
- ++outstanding_connects;
-
- // wait until we have a connection object
- while (data->con == 0)
- {
- uint64 cur_time = ts.get_timestamp();
- if (end_time > cur_time && data->error_occurred == false)
- {
- timeout = static_cast<unsigned long>((end_time - cur_time)/1000);
- }
- else
- {
- // let the thread know that it should terminate
- data->connect_ended = true;
- connect_signaler.broadcast();
- if (data->error_occurred)
- throw socket_error("unable to connect to '" + host_or_ip);
- else
- throw socket_error("unable to connect to '" + host_or_ip + "' because connect timed out");
- }
-
- connect_signaler.wait_or_timeout(timeout);
- }
-
- // let the thread know that it should terminate
- data->connect_ended = true;
- connect_signaler.broadcast();
- return data->con;
- }
-
-// ----------------------------------------------------------------------------------------
-
- bool is_ip_address (
- std::string ip
- )
- {
- for (std::string::size_type i = 0; i < ip.size(); ++i)
- {
- if (ip[i] == '.')
- ip[i] = ' ';
- }
- std::istringstream sin(ip);
-
- bool bad = false;
- int num;
- for (int i = 0; i < 4; ++i)
- {
- sin >> num;
- if (!sin || num < 0 || num > 255)
- {
- bad = true;
- break;
- }
- }
-
- if (sin.get() != EOF)
- bad = true;
-
- return !bad;
- }
-
-// ----------------------------------------------------------------------------------------
-
- void close_gracefully (
- connection* con,
- unsigned long timeout
- )
- {
- std::unique_ptr<connection> ptr(con);
- close_gracefully(ptr,timeout);
- }
-
-// ----------------------------------------------------------------------------------------
-
- void close_gracefully (
- std::unique_ptr<connection>& con,
- unsigned long timeout
- )
- {
- if (!con)
- return;
-
- if(con->shutdown_outgoing())
- {
- // there was an error so just close it now and return
- con.reset();
- return;
- }
-
- try
- {
- dlib::timeout t(*con,&connection::shutdown,timeout);
-
- char junk[100];
- // wait for the other end to close their side
- while (con->read(junk,sizeof(junk)) > 0) ;
- }
- catch (...)
- {
- con.reset();
- throw;
- }
-
- con.reset();
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_SOCKETS_EXTENSIONs_CPP
-
-
diff --git a/ml/dlib/dlib/sockets/sockets_extensions.h b/ml/dlib/dlib/sockets/sockets_extensions.h
deleted file mode 100644
index 9faa34e01..000000000
--- a/ml/dlib/dlib/sockets/sockets_extensions.h
+++ /dev/null
@@ -1,151 +0,0 @@
-// 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_
-
diff --git a/ml/dlib/dlib/sockets/sockets_extensions_abstract.h b/ml/dlib/dlib/sockets/sockets_extensions_abstract.h
deleted file mode 100644
index 194c22ab2..000000000
--- a/ml/dlib/dlib/sockets/sockets_extensions_abstract.h
+++ /dev/null
@@ -1,300 +0,0 @@
-// Copyright (C) 2006 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#undef DLIB_SOCKETS_EXTENSIONs_ABSTRACT_
-#ifdef DLIB_SOCKETS_EXTENSIONs_ABSTRACT_
-
-#include <memory>
-#include <string>
-
-#include "sockets_kernel_abstract.h"
-#include "../error.h"
-
-namespace dlib
-{
-
-// ----------------------------------------------------------------------------------------
-
- class invalid_network_address : public dlib::error
- {
- /*!
- WHAT THIS OBJECT REPRESENTS
- This is the exception thrown by network_address's constructor if the
- input is invalid.
- !*/
- };
-
-// ----------------------------------------------------------------------------------------
-
- struct network_address
- {
- /*!
- WHAT THIS OBJECT REPRESENTS
- This object is simply a container for two things:
- - A host machine address which is either an IP address or DNS name
- for a machine.
- - A port number.
-
- Together, these things define a machine and port on that machine.
- !*/
-
- network_address(
- );
- /*!
- ensures
- - host_address == ""
- - #port == 0
- !*/
-
- network_address(
- const std::string& full_address
- );
- /*!
- ensures
- - interprets full_address as a network address of the form:
- host_address:port
- and assigns each part into #host_address and #port. For example,
- network_address("localhost:80") would result in a network_address
- object where host_address was "localhost" and port was 80.
- throws
- - invalid_network_address
- This exception is thrown if the full_address string can't be
- interpreted as a valid network address.
- !*/
-
- network_address (
- const char* full_address
- );
- /*!
- requires
- - full_address == a valid pointer to a null terminated string
- ensures
- - Invoking this constructor is equivalent to performing
- network_address(std::string(full_address))
- !*/
-
- network_address(
- const std::string& host_address_,
- const unsigned short port_
- );
- /*!
- ensures
- - #host_address == host_address_
- - #port == port_
- !*/
-
-
- std::string host_address;
- unsigned short port;
- };
-
-// ----------------------------------------------------------------------------------------
-
- inline bool operator < (
- const network_address& a,
- const network_address& b
- );
- /*!
- ensures
- - provides a total ordering over network_address objects so you can use them in
- the standard associative containers. The ordering is defined such that if
- you sorted network addresses they would sort first on the host_address string
- and then, for network_address objects with equal host_address, they would
- sort on the port number
- !*/
-
- inline bool operator== (
- const network_address& a,
- const network_address& b
- );
- /*!
- ensures
- - returns true if a and b contain exactly the same address and false otherwise.
- That is, the following must be true for this function to return true:
- - a.host_address == b.host_address
- - a.port == b.port
- Note that this means that two addresses which are logically equivalent but
- written differently will not compare equal. For example, suppose example.com
- has the IP address 10.1.1.1. Then network_address("10.1.1.1:80") and
- network_address("example.com:80") really refer to the same network resource
- but will nevertheless not compare equal since.
- !*/
-
- inline bool operator != (
- const network_address& a,
- const network_address& b
- );
- /*!
- ensures
- - returns !(a == b)
- !*/
-
-// ----------------------------------------------------------------------------------------
-
- void serialize(
- const network_address& item,
- std::ostream& out
- );
- /*!
- ensures
- - provides serialization support
- !*/
-
- void deserialize(
- network_address& item,
- std::istream& in
- );
- /*!
- ensures
- - provides deserialization support
- !*/
-
- std::ostream& operator<< (
- std::ostream& out,
- const network_address& item
- );
- /*!
- ensures
- - writes the given network_address to the output stream. The format is the
- host_address, then a colon, then the port number. So for example:
- cout << network_address("localhost", 80);
- would print:
- localhost:80
- - returns #out
- !*/
-
- std::istream& operator>> (
- std::istream& in,
- network_address& item
- );
- /*!
- ensures
- - reads a network_address from the given input stream. The expected format is
- the same as the one used to print them by the above operator<<() routine.
- - returns #in
- - if (there is an error reading the network_address) then
- - #in.good() == false
- !*/
-
-// ----------------------------------------------------------------------------------------
-
- connection* connect (
- const std::string& host_or_ip,
- unsigned short port
- );
- /*!
- ensures
- - returns a connection object that is connected to the given host at the
- given port
- throws
- - dlib::socket_error
- This exception is thrown if there is some problem that prevents us from
- creating the connection
- - std::bad_alloc
- !*/
-
-// ----------------------------------------------------------------------------------------
-
- connection* connect (
- const network_address& addr
- );
- /*!
- ensures
- - returns connect(addr.host_address, addr_port);
- !*/
-
-// ----------------------------------------------------------------------------------------
-
- connection* connect (
- const std::string& host_or_ip,
- unsigned short port,
- unsigned long timeout
- );
- /*!
- ensures
- - returns a connection object that is connected to the given host at the
- given port.
- - blocks for at most timeout milliseconds
- throws
- - dlib::socket_error
- This exception is thrown if there is some problem that prevents us from
- creating the connection or if timeout milliseconds elapses before the
- connect is successful.
- - std::bad_alloc
- !*/
-
-// ----------------------------------------------------------------------------------------
-
-
- bool is_ip_address (
- std::string ip
- );
- /*!
- ensures
- - if (ip is a valid ip address) then
- - returns true
- - else
- - returns false
- !*/
-
-// ----------------------------------------------------------------------------------------
-
- void close_gracefully (
- connection* con,
- unsigned long timeout = 500
- );
- /*!
- requires
- - con == a valid pointer to a connection object or 0
- ensures
- - This function does nothing if con == 0, otherwise it performs the following:
- - performs a graceful close of the given connection and if it takes longer
- than timeout milliseconds to complete then forces the connection closed.
- - Specifically, a graceful close means that the outgoing part of con is
- closed (a FIN is sent) and then we wait for the other end to to close
- their end of the connection. This way any data still on its way to
- the other end of the connection will be received properly.
- - This function will block until the graceful close is completed or we
- timeout.
- - calls "delete con;". Thus con is no longer a valid pointer after this
- function has finished.
- throws
- - std::bad_alloc or dlib::thread_error
- If either of these exceptions are thrown con will still be closed via
- "delete con;"
- !*/
-
-// ----------------------------------------------------------------------------------------
-
- void close_gracefully (
- std::unique_ptr<connection>& con,
- unsigned long timeout = 500
- );
- /*!
- requires
- - con == a valid pointer to a connection object or con.get() == 0
- ensures
- - This function does nothing if con.get() == 0, otherwise it performs the
- following:
- - performs a graceful close of the given connection and if it takes longer
- than timeout milliseconds to complete then forces the connection closed.
- - Specifically, a graceful close means that the outgoing part of con is
- closed (a FIN is sent) and then we wait for the other end to to close
- their end of the connection. This way any data still on its way to
- the other end of the connection will be received properly.
- - This function will block until the graceful close is completed or we
- timeout.
- - #con.get() == 0. Thus con is no longer a valid pointer after this
- function has finished.
- throws
- - std::bad_alloc or dlib::thread_error
- If either of these exceptions are thrown con will still be closed and
- deleted (i.e. #con.get() == 0).
- !*/
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // DLIB_SOCKETS_EXTENSIONs_ABSTRACT_
-
-
diff --git a/ml/dlib/dlib/sockets/sockets_kernel_1.cpp b/ml/dlib/dlib/sockets/sockets_kernel_1.cpp
deleted file mode 100644
index 55e39569f..000000000
--- a/ml/dlib/dlib/sockets/sockets_kernel_1.cpp
+++ /dev/null
@@ -1,979 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net), Miguel Grinberg
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_SOCKETS_KERNEL_1_CPp_
-#define DLIB_SOCKETS_KERNEL_1_CPp_
-#include "../platform.h"
-
-#ifdef WIN32
-
-#include <winsock2.h>
-
-#ifndef _WINSOCKAPI_
-#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
-#endif
-
-#include "../windows_magic.h"
-
-#include "sockets_kernel_1.h"
-
-#include <windows.h>
-
-#ifndef NI_MAXHOST
-#define NI_MAXHOST 1025
-#endif
-
-
-// tell visual studio to link to the libraries we need if we are
-// in fact using visual studio
-#ifdef _MSC_VER
-#pragma comment (lib, "ws2_32.lib")
-#endif
-
-#include "../assert.h"
-
-namespace dlib
-{
-
-// ----------------------------------------------------------------------------------------
-
- class SOCKET_container
- {
- /*!
- This object is just a wrapper around the SOCKET type. It exists
- so that we can #include the windows.h and Winsock2.h header files
- in this cpp file and not at all in the header file.
- !*/
- public:
- SOCKET_container (
- SOCKET s = INVALID_SOCKET
- ) : val(s) {}
-
- SOCKET val;
- operator SOCKET&() { return val; }
-
- SOCKET_container& operator= (
- const SOCKET& s
- ) { val = s; return *this; }
-
- bool operator== (
- const SOCKET& s
- ) const { return s == val; }
- };
-
-// ----------------------------------------------------------------------------------------
-// stuff to ensure that WSAStartup() is always called before any sockets stuff is needed
-
- namespace sockets_kernel_1_mutex
- {
- mutex startup_lock;
- }
-
- class sockets_startupdown
- {
- public:
- sockets_startupdown();
- ~sockets_startupdown() { WSACleanup( ); }
-
- };
- sockets_startupdown::sockets_startupdown (
- )
- {
- WSADATA wsaData;
- WSAStartup (MAKEWORD(2,0), &wsaData);
- }
-
- void sockets_startup()
- {
- // mutex crap to make this function thread-safe
- sockets_kernel_1_mutex::startup_lock.lock();
- static sockets_startupdown a;
- sockets_kernel_1_mutex::startup_lock.unlock();
- }
-
-// ----------------------------------------------------------------------------------------
-
- // lookup functions
-
- int
- get_local_hostname (
- std::string& hostname
- )
- {
- // ensure that WSAStartup has been called and WSACleanup will eventually
- // be called when program ends
- sockets_startup();
-
- try
- {
-
- char temp[NI_MAXHOST];
- if (gethostname(temp,NI_MAXHOST) == SOCKET_ERROR )
- {
- return OTHER_ERROR;
- }
-
- hostname = temp;
- }
- catch (...)
- {
- return OTHER_ERROR;
- }
-
- return 0;
- }
-
-// -----------------
-
- int
- hostname_to_ip (
- const std::string& hostname,
- std::string& ip,
- int n
- )
- {
- // ensure that WSAStartup has been called and WSACleanup will eventually
- // be called when program ends
- sockets_startup();
-
- try
- {
- // lock this mutex since gethostbyname isn't really thread safe
- auto_mutex M(sockets_kernel_1_mutex::startup_lock);
-
- // if no hostname was given then return error
- if ( hostname.empty())
- return OTHER_ERROR;
-
- hostent* address;
- address = gethostbyname(hostname.c_str());
-
- if (address == 0)
- {
- return OTHER_ERROR;
- }
-
- // find the nth address
- in_addr* addr = reinterpret_cast<in_addr*>(address->h_addr_list[0]);
- for (int i = 1; i <= n; ++i)
- {
- addr = reinterpret_cast<in_addr*>(address->h_addr_list[i]);
-
- // if there is no nth address then return error
- if (addr == 0)
- return OTHER_ERROR;
- }
-
- char* resolved_ip = inet_ntoa(*addr);
-
- // check if inet_ntoa returned an error
- if (resolved_ip == NULL)
- {
- return OTHER_ERROR;
- }
-
- ip.assign(resolved_ip);
-
- }
- catch(...)
- {
- return OTHER_ERROR;
- }
-
- return 0;
- }
-
-// -----------------
-
- int
- ip_to_hostname (
- const std::string& ip,
- std::string& hostname
- )
- {
- // ensure that WSAStartup has been called and WSACleanup will eventually
- // be called when program ends
- sockets_startup();
-
- try
- {
- // lock this mutex since gethostbyaddr isn't really thread safe
- auto_mutex M(sockets_kernel_1_mutex::startup_lock);
-
- // if no ip was given then return error
- if (ip.empty())
- return OTHER_ERROR;
-
- hostent* address;
- unsigned long ipnum = inet_addr(ip.c_str());
-
- // if inet_addr couldn't convert ip then return an error
- if (ipnum == INADDR_NONE)
- {
- return OTHER_ERROR;
- }
- address = gethostbyaddr(reinterpret_cast<char*>(&ipnum),4,AF_INET);
-
- // check if gethostbyaddr returned an error
- if (address == 0)
- {
- return OTHER_ERROR;
- }
- hostname.assign(address->h_name);
-
- }
- catch (...)
- {
- return OTHER_ERROR;
- }
- return 0;
-
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // connection object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- connection::
- connection(
- SOCKET_container sock,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- ) :
- user_data(0),
- connection_socket(*(new SOCKET_container())),
- connection_foreign_port(foreign_port),
- connection_foreign_ip(foreign_ip),
- connection_local_port(local_port),
- connection_local_ip(local_ip),
- sd(false),
- sdo(false),
- sdr(0)
- {
- connection_socket = sock;
- }
-
-// ----------------------------------------------------------------------------------------
-
- connection::
- ~connection (
- )
- {
- if (connection_socket != INVALID_SOCKET)
- closesocket(connection_socket);
- delete &connection_socket;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int connection::
- disable_nagle()
- {
- int flag = 1;
- int status = setsockopt( connection_socket, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) );
-
- if (status == SOCKET_ERROR)
- return OTHER_ERROR;
- else
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- long connection::
- write (
- const char* buf,
- long num
- )
- {
- const long old_num = num;
- long status;
- const long max_send_length = 1024*1024*100;
- while (num > 0)
- {
- // Make sure to cap the max value num can take on so that if it is
- // really large (it might be big on 64bit platforms) so that the OS
- // can't possibly get upset about it being large.
- const long length = std::min(max_send_length, num);
- if ( (status = send(connection_socket,buf,length,0)) == SOCKET_ERROR)
- {
- if (sdo_called())
- return SHUTDOWN;
- else
- return OTHER_ERROR;
- }
- num -= status;
- buf += status;
- }
- return old_num;
- }
-
-// ----------------------------------------------------------------------------------------
-
- long connection::
- read (
- char* buf,
- long num
- )
- {
- const long max_recv_length = 1024*1024*100;
- // Make sure to cap the max value num can take on so that if it is
- // really large (it might be big on 64bit platforms) so that the OS
- // can't possibly get upset about it being large.
- const long length = std::min(max_recv_length, num);
- long status = recv(connection_socket,buf,length,0);
- if (status == SOCKET_ERROR)
- {
- // if this error is the result of a shutdown call then return SHUTDOWN
- if (sd_called())
- return SHUTDOWN;
- else
- return OTHER_ERROR;
- }
- else if (status == 0 && sd_called())
- {
- return SHUTDOWN;
- }
- return status;
- }
-
-// ----------------------------------------------------------------------------------------
-
- long connection::
- read (
- char* buf,
- long num,
- unsigned long timeout
- )
- {
- if (readable(timeout) == false)
- return TIMEOUT;
-
- const long max_recv_length = 1024*1024*100;
- // Make sure to cap the max value num can take on so that if it is
- // really large (it might be big on 64bit platforms) so that the OS
- // can't possibly get upset about it being large.
- const long length = std::min(max_recv_length, num);
- long status = recv(connection_socket,buf,length,0);
- if (status == SOCKET_ERROR)
- {
- // if this error is the result of a shutdown call then return SHUTDOWN
- if (sd_called())
- return SHUTDOWN;
- else
- return OTHER_ERROR;
- }
- else if (status == 0 && sd_called())
- {
- return SHUTDOWN;
- }
- return status;
- }
-
-// ----------------------------------------------------------------------------------------
-
- bool connection::
- readable (
- unsigned long timeout
- ) const
- {
- fd_set read_set;
- // initialize read_set
- FD_ZERO(&read_set);
-
- // add the listening socket to read_set
- FD_SET(connection_socket, &read_set);
-
- // setup a timeval structure
- timeval time_to_wait;
- time_to_wait.tv_sec = static_cast<long>(timeout/1000);
- time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);
-
- // wait on select
- int status = select(0,&read_set,0,0,&time_to_wait);
-
- // if select timed out or there was an error
- if (status <= 0)
- return false;
-
- // data is ready to be read
- return true;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int connection::
- shutdown_outgoing (
- )
- {
- sd_mutex.lock();
- if (sdo || sd)
- {
- sd_mutex.unlock();
- return sdr;
- }
- sdo = true;
- sdr = ::shutdown(connection_socket,SD_SEND);
-
- // convert -1 error code into the OTHER_ERROR error code
- if (sdr == -1)
- sdr = OTHER_ERROR;
-
- int temp = sdr;
-
- sd_mutex.unlock();
- return temp;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int connection::
- shutdown (
- )
- {
- sd_mutex.lock();
- if (sd)
- {
- sd_mutex.unlock();
- return sdr;
- }
- sd = true;
- SOCKET stemp = connection_socket;
- connection_socket = INVALID_SOCKET;
- sdr = closesocket(stemp);
-
- // convert SOCKET_ERROR error code into the OTHER_ERROR error code
- if (sdr == SOCKET_ERROR)
- sdr = OTHER_ERROR;
-
- int temp = sdr;
-
- sd_mutex.unlock();
- return temp;
- }
-
-// ----------------------------------------------------------------------------------------
-
- connection::socket_descriptor_type connection::
- get_socket_descriptor (
- ) const
- {
- return connection_socket.val;
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // listener object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- listener::
- listener(
- SOCKET_container sock,
- unsigned short port,
- const std::string& ip
- ) :
- listening_socket(*(new SOCKET_container)),
- listening_port(port),
- listening_ip(ip),
- inaddr_any(listening_ip.empty())
- {
- listening_socket = sock;
- }
-
-// ----------------------------------------------------------------------------------------
-
- listener::
- ~listener (
- )
- {
- closesocket(listening_socket);
- delete &listening_socket;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int listener::
- accept (
- std::unique_ptr<connection>& new_connection,
- unsigned long timeout
- )
- {
- new_connection.reset(0);
- connection* con;
- int status = this->accept(con, timeout);
-
- if (status == 0)
- new_connection.reset(con);
-
- return status;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int listener::
- accept (
- connection*& new_connection,
- unsigned long timeout
- )
- {
- SOCKET incoming;
- sockaddr_in incomingAddr;
- int length = sizeof(sockaddr_in);
-
- // implement timeout with select if timeout is > 0
- if (timeout > 0)
- {
- fd_set read_set;
- // initialize read_set
- FD_ZERO(&read_set);
-
- // add the listening socket to read_set
- FD_SET(listening_socket, &read_set);
-
- // setup a timeval structure
- timeval time_to_wait;
- time_to_wait.tv_sec = static_cast<long>(timeout/1000);
- time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);
-
-
- // wait on select
- int status = select(0,&read_set,0,0,&time_to_wait);
-
- // if select timed out
- if (status == 0)
- return TIMEOUT;
-
- // if select returned an error
- if (status == SOCKET_ERROR)
- return OTHER_ERROR;
-
- }
-
-
- // call accept to get a new connection
- incoming=::accept(listening_socket,reinterpret_cast<sockaddr*>(&incomingAddr),&length);
-
- // if there was an error return OTHER_ERROR
- if ( incoming == INVALID_SOCKET )
- return OTHER_ERROR;
-
-
- // get the port of the foreign host into foreign_port
- int foreign_port = ntohs(incomingAddr.sin_port);
-
- // get the IP of the foreign host into foreign_ip
- std::string foreign_ip;
- {
- char* foreign_ip_temp = inet_ntoa(incomingAddr.sin_addr);
-
- // check if inet_ntoa() returned an error
- if (foreign_ip_temp == NULL)
- {
- closesocket(incoming);
- return OTHER_ERROR;
- }
-
- foreign_ip.assign(foreign_ip_temp);
- }
-
-
- // get the local ip
- std::string local_ip;
- if (inaddr_any == true)
- {
- sockaddr_in local_info;
- length = sizeof(sockaddr_in);
- // get the local sockaddr_in structure associated with this new connection
- if ( getsockname (
- incoming,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == SOCKET_ERROR
- )
- { // an error occurred
- closesocket(incoming);
- return OTHER_ERROR;
- }
- char* temp = inet_ntoa(local_info.sin_addr);
-
- // check if inet_ntoa() returned an error
- if (temp == NULL)
- {
- closesocket(incoming);
- return OTHER_ERROR;
- }
- local_ip.assign(temp);
- }
- else
- {
- local_ip = listening_ip;
- }
-
-
- // set the SO_OOBINLINE option
- int flag_value = 1;
- if (setsockopt(incoming,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const char*>(&flag_value),sizeof(int)) == SOCKET_ERROR )
- {
- closesocket(incoming);
- return OTHER_ERROR;
- }
-
-
- // make a new connection object for this new connection
- try
- {
- new_connection = new connection (
- incoming,
- foreign_port,
- foreign_ip,
- listening_port,
- local_ip
- );
- }
- catch (...) { closesocket(incoming); return OTHER_ERROR; }
-
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // socket creation functions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- int create_listener (
- std::unique_ptr<listener>& new_listener,
- unsigned short port,
- const std::string& ip
- )
- {
- new_listener.reset();
- listener* temp;
- int status = create_listener(temp,port,ip);
-
- if (status == 0)
- new_listener.reset(temp);
-
- return status;
- }
-
- int create_listener (
- listener*& new_listener,
- unsigned short port,
- const std::string& ip
- )
- {
- // ensure that WSAStartup has been called and WSACleanup will eventually
- // be called when program ends
- sockets_startup();
-
- sockaddr_in sa; // local socket structure
- ZeroMemory(&sa,sizeof(sockaddr_in)); // initialize sa
-
- SOCKET sock = socket (AF_INET, SOCK_STREAM, 0); // get a new socket
-
- // if socket() returned an error then return OTHER_ERROR
- if (sock == INVALID_SOCKET )
- {
- return OTHER_ERROR;
- }
-
- // set the local socket structure
- sa.sin_family = AF_INET;
- sa.sin_port = htons(port);
- if (ip.empty())
- {
- // if the listener should listen on any IP
- sa.sin_addr.S_un.S_addr = htons(INADDR_ANY);
- }
- else
- {
- // if there is a specific ip to listen on
- sa.sin_addr.S_un.S_addr = inet_addr(ip.c_str());
- // if inet_addr couldn't convert the ip then return an error
- if ( sa.sin_addr.S_un.S_addr == INADDR_NONE )
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
- }
-
- // set the SO_REUSEADDR option
- int flag_value = 1;
- setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,reinterpret_cast<const char*>(&flag_value),sizeof(int));
-
- // bind the new socket to the requested port and ip
- if (bind(sock,reinterpret_cast<sockaddr*>(&sa),sizeof(sockaddr_in))==SOCKET_ERROR)
- {
- const int err = WSAGetLastError();
- // if there was an error
- closesocket(sock);
-
- // if the port is already bound then return PORTINUSE
- if (err == WSAEADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
-
- // tell the new socket to listen
- if ( listen(sock,SOMAXCONN) == SOCKET_ERROR)
- {
- const int err = WSAGetLastError();
- // if there was an error return OTHER_ERROR
- closesocket(sock);
-
- // if the port is already bound then return PORTINUSE
- if (err == WSAEADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
- // determine the port used if necessary
- if (port == 0)
- {
- sockaddr_in local_info;
- int length = sizeof(sockaddr_in);
- if ( getsockname (
- sock,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == SOCKET_ERROR
- )
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
- port = ntohs(local_info.sin_port);
- }
-
-
- // initialize a listener object on the heap with the new socket
- try { new_listener = new listener(sock,port,ip); }
- catch(...) { closesocket(sock); return OTHER_ERROR; }
-
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int create_connection (
- std::unique_ptr<connection>& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- )
- {
- new_connection.reset();
- connection* temp;
- int status = create_connection(temp,foreign_port, foreign_ip, local_port, local_ip);
-
- if (status == 0)
- new_connection.reset(temp);
-
- return status;
- }
-
- int create_connection (
- connection*& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- )
- {
- // ensure that WSAStartup has been called and WSACleanup
- // will eventually be called when program ends
- sockets_startup();
-
-
- sockaddr_in local_sa; // local socket structure
- sockaddr_in foreign_sa; // foreign socket structure
- ZeroMemory(&local_sa,sizeof(sockaddr_in)); // initialize local_sa
- ZeroMemory(&foreign_sa,sizeof(sockaddr_in)); // initialize foreign_sa
-
- int length;
-
- SOCKET sock = socket (AF_INET, SOCK_STREAM, 0); // get a new socket
-
- // if socket() returned an error then return OTHER_ERROR
- if (sock == INVALID_SOCKET )
- {
- return OTHER_ERROR;
- }
-
- // set the foreign socket structure
- foreign_sa.sin_family = AF_INET;
- foreign_sa.sin_port = htons(foreign_port);
- foreign_sa.sin_addr.S_un.S_addr = inet_addr(foreign_ip.c_str());
-
- // if inet_addr couldn't convert the ip then return an error
- if ( foreign_sa.sin_addr.S_un.S_addr == INADDR_NONE )
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
-
-
- // set up the local socket structure
- local_sa.sin_family = AF_INET;
-
- // set the local ip
- if (local_ip.empty())
- {
- // if the listener should listen on any IP
- local_sa.sin_addr.S_un.S_addr = htons(INADDR_ANY);
- }
- else
- {
- // if there is a specific ip to listen on
- local_sa.sin_addr.S_un.S_addr = inet_addr(local_ip.c_str());
-
- // if inet_addr couldn't convert the ip then return an error
- if (local_sa.sin_addr.S_un.S_addr == INADDR_NONE)
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
- }
-
- // set the local port
- local_sa.sin_port = htons(local_port);
-
-
-
- // bind the new socket to the requested local port and local ip
- if ( bind (
- sock,
- reinterpret_cast<sockaddr*>(&local_sa),
- sizeof(sockaddr_in)
- ) == SOCKET_ERROR
- )
- {
- const int err = WSAGetLastError();
- // if there was an error
- closesocket(sock);
-
- // if the port is already bound then return PORTINUSE
- if (err == WSAEADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
- // connect the socket
- if (connect (
- sock,
- reinterpret_cast<sockaddr*>(&foreign_sa),
- sizeof(sockaddr_in)
- ) == SOCKET_ERROR
- )
- {
- const int err = WSAGetLastError();
- closesocket(sock);
- // if the port is already bound then return PORTINUSE
- if (err == WSAEADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
-
-
- // determine the local port and IP and store them in used_local_ip
- // and used_local_port
- int used_local_port;
- std::string used_local_ip;
- sockaddr_in local_info;
- if (local_port == 0)
- {
- length = sizeof(sockaddr_in);
- if (getsockname (
- sock,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == SOCKET_ERROR
- )
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
- used_local_port = ntohs(local_info.sin_port);
- }
- else
- {
- used_local_port = local_port;
- }
-
- // determine real local ip
- if (local_ip.empty())
- {
- // if local_port is not 0 then we must fill the local_info structure
- if (local_port != 0)
- {
- length = sizeof(sockaddr_in);
- if ( getsockname (
- sock,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == SOCKET_ERROR
- )
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
- }
- char* temp = inet_ntoa(local_info.sin_addr);
-
- // check if inet_ntoa returned an error
- if (temp == NULL)
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
- used_local_ip.assign(temp);
- }
- else
- {
- used_local_ip = local_ip;
- }
-
- // set the SO_OOBINLINE option
- int flag_value = 1;
- if (setsockopt(sock,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const char*>(&flag_value),sizeof(int)) == SOCKET_ERROR )
- {
- closesocket(sock);
- return OTHER_ERROR;
- }
-
- // initialize a connection object on the heap with the new socket
- try
- {
- new_connection = new connection (
- sock,
- foreign_port,
- foreign_ip,
- used_local_port,
- used_local_ip
- );
- }
- catch(...) {closesocket(sock); return OTHER_ERROR; }
-
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // WIN32
-
-#endif // DLIB_SOCKETS_KERNEL_1_CPp_
-
diff --git a/ml/dlib/dlib/sockets/sockets_kernel_1.h b/ml/dlib/dlib/sockets/sockets_kernel_1.h
deleted file mode 100644
index 5fb73ecd6..000000000
--- a/ml/dlib/dlib/sockets/sockets_kernel_1.h
+++ /dev/null
@@ -1,351 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net), Miguel Grinberg
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_SOCKETS_KERNEl_1_
-#define DLIB_SOCKETS_KERNEl_1_
-
-#ifdef DLIB_ISO_CPP_ONLY
-#error "DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code. Turn DLIB_ISO_CPP_ONLY off if you want to use it."
-#endif
-
-#include "sockets_kernel_abstract.h"
-
-#include <memory>
-#include <string>
-
-#include "../algs.h"
-#include "../threads.h"
-#include "../uintn.h"
-
-
-namespace dlib
-{
-
-// ----------------------------------------------------------------------------------------
-
- // forward declarations
- class socket_factory;
- class listener;
- class SOCKET_container;
-
-// ----------------------------------------------------------------------------------------
-
- // lookup functions
-
- int
- get_local_hostname (
- std::string& hostname
- );
-
-// -----------------
-
- int
- hostname_to_ip (
- const std::string& hostname,
- std::string& ip,
- int n = 0
- );
-
-// -----------------
-
- int
- ip_to_hostname (
- const std::string& ip,
- std::string& hostname
- );
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // connection object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- class connection
- {
- /*!
- INITIAL_VALUE
- - sd == false
- - sdo == false
- - sdr == 0
-
- CONVENTION
- - connection_socket == the socket handle for this connection.
- - connection_foreign_port == the port that foreign host is using for
- this connection.
- - connection_foreign_ip == a string containing the IP address of the
- foreign host.
- - connection_local_port == the port that the local host is using for
- this connection.
- - connection_local_ip == a string containing the IP address of the
- local interface being used by this connection.
-
- - sd == if shutdown() has been called then true else false.
- - sdo == if shutdown_outgoing() has been called then true else false.
- - sdr == the return value of shutdown() if it has been called. if it
- hasn't been called then 0.
-
- !*/
-
- friend class listener; // make listener a friend of connection
- // make create_connection a friend of connection
- friend int create_connection (
- connection*& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- );
-
- public:
-
- ~connection (
- );
-
- void* user_data;
-
- long write (
- const char* buf,
- long num
- );
-
- long read (
- char* buf,
- long num
- );
-
- long read (
- char* buf,
- long num,
- unsigned long timeout
- );
-
- unsigned short get_local_port (
- ) const { return connection_local_port; }
-
- unsigned short get_foreign_port (
- ) const { return connection_foreign_port; }
-
- const std::string& get_local_ip (
- ) const { return connection_local_ip; }
-
- const std::string& get_foreign_ip (
- ) const { return connection_foreign_ip; }
-
- int shutdown_outgoing (
- );
-
- int shutdown (
- );
-
- // I would use SOCKET here but I don't want to include the windows
- // header files since they bring in a bunch of unpleasantness. So
- // I'm doing this instead which should ultimately be the same type
- // as the SOCKET win the windows API.
- typedef unsigned_type<void*>::type socket_descriptor_type;
-
- int disable_nagle(
- );
-
- socket_descriptor_type get_socket_descriptor (
- ) const;
-
- private:
-
- bool readable (
- unsigned long timeout
- ) const;
- /*!
- requires
- - timeout < 2000000
- ensures
- - returns true if a read call on this connection will not block.
- - returns false if a read call on this connection will block or if
- there was an error.
- !*/
-
- bool sd_called (
- )const
- /*!
- ensures
- - returns true if shutdown() has been called else
- returns false
- !*/
- {
- sd_mutex.lock();
- bool temp = sd;
- sd_mutex.unlock();
- return temp;
- }
-
- bool sdo_called (
- )const
- /*!
- ensures
- - returns true if shutdown_outgoing() or shutdown() has been called
- else returns false
- !*/
- {
- sd_mutex.lock();
- bool temp = false;
- if (sdo || sd)
- temp = true;
- sd_mutex.unlock();
- return temp;
- }
-
-
- // data members
- SOCKET_container& connection_socket;
- const unsigned short connection_foreign_port;
- const std::string connection_foreign_ip;
- const unsigned short connection_local_port;
- const std::string connection_local_ip;
-
- bool sd; // called shutdown
- bool sdo; // called shutdown_outgoing
- int sdr; // return value for shutdown
- mutex sd_mutex; // a lock for the three above vars
-
-
- connection(
- SOCKET_container sock,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- );
- /*!
- requires
- sock is a socket handle and
- sock is the handle for the connection between foreign_ip:foreign_port
- and local_ip:local_port
- ensures
- *this is initialized correctly with the above parameters
- !*/
-
-
- // restricted functions
- connection(connection&); // copy constructor
- connection& operator=(connection&); // assignment operator
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // listener object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- class listener
- {
- /*!
- CONVENTION
- if (inaddr_any == false)
- {
- listening_ip == a string containing the address the listener is
- listening on
- }
- else
- {
- the listener is listening on all interfaces
- }
-
- listening_port == the port the listener is listening on
- listening_socket == the listening socket handle for this object
- !*/
-
- // make the create_listener a friend of listener
- friend int create_listener (
- listener*& new_listener,
- unsigned short port,
- const std::string& ip
- );
-
- public:
-
- ~listener (
- );
-
- int accept (
- connection*& new_connection,
- unsigned long timeout = 0
- );
-
- int accept (
- std::unique_ptr<connection>& new_connection,
- unsigned long timeout = 0
- );
-
- unsigned short get_listening_port (
- ) { return listening_port; }
-
- const std::string& get_listening_ip (
- ) { return listening_ip; }
-
- private:
-
- // data members
- SOCKET_container& listening_socket;
- const unsigned short listening_port;
- const std::string listening_ip;
- const bool inaddr_any;
-
- listener(
- SOCKET_container sock,
- unsigned short port,
- const std::string& ip
- );
- /*!
- requires
- sock is a socket handle and
- sock is listening on the port and ip(may be "") indicated in the
- above parameters
- ensures
- *this is initialized correctly with the above parameters
- !*/
-
-
- // restricted functions
- listener(listener&); // copy constructor
- listener& operator=(listener&); // assignment operator
- };
-
-// ----------------------------------------------------------------------------------------
-
- int create_listener (
- listener*& new_listener,
- unsigned short port,
- const std::string& ip = ""
- );
-
- int create_connection (
- connection*& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port = 0,
- const std::string& local_ip = ""
- );
-
- int create_listener (
- std::unique_ptr<listener>& new_listener,
- unsigned short port,
- const std::string& ip = ""
- );
-
- int create_connection (
- std::unique_ptr<connection>& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port = 0,
- const std::string& local_ip = ""
- );
-
-// ----------------------------------------------------------------------------------------
-
-
-}
-
-#ifdef NO_MAKEFILE
-#include "sockets_kernel_1.cpp"
-#endif
-
-#endif // DLIB_SOCKETS_KERNEl_1_
-
diff --git a/ml/dlib/dlib/sockets/sockets_kernel_2.cpp b/ml/dlib/dlib/sockets/sockets_kernel_2.cpp
deleted file mode 100644
index ac7408ff3..000000000
--- a/ml/dlib/dlib/sockets/sockets_kernel_2.cpp
+++ /dev/null
@@ -1,1109 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net), Miguel Grinberg
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_SOCKETS_KERNEL_2_CPp_
-#define DLIB_SOCKETS_KERNEL_2_CPp_
-
-#include "../platform.h"
-
-#ifdef POSIX
-
-
-#include "sockets_kernel_2.h"
-#include <fcntl.h>
-#include "../set.h"
-#include <netinet/tcp.h>
-
-
-
-namespace dlib
-{
-// ----------------------------------------------------------------------------------------
-
-#ifdef HPUX
- typedef int dsocklen_t;
-#else
- typedef socklen_t dsocklen_t;
-#endif
-
-// ----------------------------------------------------------------------------------------
-// stuff to ensure that the signal SIGPIPE is ignored before any connections are made
-// so that when a connection object is shutdown the program won't end on a broken pipe
-
- namespace sockets_kernel_2_mutex
- {
- mutex startup_lock;
- }
-
-
- void sockets_startup()
- {
- // mutex crap to make this function thread safe
- sockets_kernel_2_mutex::startup_lock.lock();
- static bool init = false;
- if (init == false)
- {
- init = true;
- signal( SIGPIPE, SIG_IGN);
- }
- sockets_kernel_2_mutex::startup_lock.unlock();
- }
-
-
-// ----------------------------------------------------------------------------------------
-
- // lookup functions
-
- int
- get_local_hostname (
- std::string& hostname
- )
- {
- try
- {
- char temp[MAXHOSTNAMELEN];
-
- if (gethostname(temp,MAXHOSTNAMELEN) == -1)
- {
- return OTHER_ERROR;
- }
- // ensure that NUL is at the end of the string
- temp[MAXHOSTNAMELEN-1] = '\0';
-
- hostname = temp;
- }
- catch (...)
- {
- return OTHER_ERROR;
- }
-
- return 0;
- }
-
-// -----------------
-
-// cygwin currently doesn't support the getaddrinfo stuff
-#ifndef __CYGWIN__
-
- int
- hostname_to_ip (
- const std::string& hostname,
- std::string& ip,
- int n
- )
- {
- try
- {
- set<std::string>::kernel_1a sos;
-
- if (hostname.empty())
- return OTHER_ERROR;
-
- addrinfo* result = 0;
- if (getaddrinfo(hostname.c_str(),0,0,&result))
- {
- return OTHER_ERROR;
- }
- addrinfo* result_orig = result;
-
- // loop over all the addrinfo structures and add them to the set. the reason for doing
- // this dumb crap is because different platforms return all kinds of weird garbage. many
- // return the same ip multiple times, etc.
- while (result != 0)
- {
- char temp[16];
- inet_ntop (
- AF_INET,
- &((reinterpret_cast<sockaddr_in*>(result->ai_addr))->sin_addr),
- temp,16
- );
-
- result = result->ai_next;
-
- ip.assign(temp);
- if (sos.is_member(ip) == false && ip != "0.0.0.0")
- sos.add(ip);
- }
-
- freeaddrinfo(result_orig);
-
- // now return the nth unique ip address
- int i = 0;
- while (sos.move_next())
- {
- if (i == n)
- {
- ip = sos.element();
- return 0;
- }
- ++i;
- }
-
- return OTHER_ERROR;
- }
- catch (...)
- {
- return OTHER_ERROR;
- }
- return 0;
- }
-
-
-// -----------------
-
- int
- ip_to_hostname (
- const std::string& ip,
- std::string& hostname
- )
- {
-
- try
- {
-
- if (ip.empty())
- return OTHER_ERROR;
-
- sockaddr_in sa;
- sa.sin_family = AF_INET;
- inet_pton(AF_INET,ip.c_str(),&sa.sin_addr);
-
- char temp[NI_MAXHOST];
- if ( getnameinfo (
- reinterpret_cast<sockaddr*>(&sa),sizeof(sockaddr_in),
- temp,
- NI_MAXHOST,
- 0,
- 0,
- NI_NAMEREQD
- )
- )
- {
- return OTHER_ERROR;
- }
-
- hostname.assign(temp);
-
- }
- catch (...)
- {
- return OTHER_ERROR;
- }
- return 0;
- }
-#else
- int
- hostname_to_ip (
- const std::string& hostname,
- std::string& ip,
- int n
- )
- {
- try
- {
- // lock this mutex since gethostbyname isn't really thread safe
- auto_mutex M(sockets_kernel_2_mutex::startup_lock);
-
- // if no hostname was given then return error
- if ( hostname.empty())
- return OTHER_ERROR;
-
- hostent* address;
- address = gethostbyname(hostname.c_str());
-
- if (address == 0)
- {
- return OTHER_ERROR;
- }
-
- // find the nth address
- in_addr* addr = reinterpret_cast<in_addr*>(address->h_addr_list[0]);
- for (int i = 1; i <= n; ++i)
- {
- addr = reinterpret_cast<in_addr*>(address->h_addr_list[i]);
-
- // if there is no nth address then return error
- if (addr == 0)
- return OTHER_ERROR;
- }
-
- char* resolved_ip = inet_ntoa(*addr);
-
- // check if inet_ntoa returned an error
- if (resolved_ip == NULL)
- {
- return OTHER_ERROR;
- }
-
- ip.assign(resolved_ip);
-
- }
- catch(...)
- {
- return OTHER_ERROR;
- }
-
- return 0;
- }
-
-// -----------------
-
- int
- ip_to_hostname (
- const std::string& ip,
- std::string& hostname
- )
- {
- try
- {
- // lock this mutex since gethostbyaddr isn't really thread safe
- auto_mutex M(sockets_kernel_2_mutex::startup_lock);
-
- // if no ip was given then return error
- if (ip.empty())
- return OTHER_ERROR;
-
- hostent* address;
- unsigned long ipnum = inet_addr(ip.c_str());
-
- // if inet_addr couldn't convert ip then return an error
- if (ipnum == INADDR_NONE)
- {
- return OTHER_ERROR;
- }
- address = gethostbyaddr(reinterpret_cast<char*>(&ipnum),4,AF_INET);
-
- // check if gethostbyaddr returned an error
- if (address == 0)
- {
- return OTHER_ERROR;
- }
- hostname.assign(address->h_name);
-
- }
- catch (...)
- {
- return OTHER_ERROR;
- }
- return 0;
-
- }
-
-#endif // __CYGWIN__
-
-// ----------------------------------------------------------------------------------------
-
- connection::
- connection(
- int sock,
- int foreign_port,
- const std::string& foreign_ip,
- int local_port,
- const std::string& local_ip
- ) :
- connection_socket(sock),
- connection_foreign_port(foreign_port),
- connection_foreign_ip(foreign_ip),
- connection_local_port(local_port),
- connection_local_ip(local_ip),
- sd(false),
- sdo(false),
- sdr(0)
- {}
-
-// ----------------------------------------------------------------------------------------
-
- int connection::
- disable_nagle()
- {
- int flag = 1;
- if(setsockopt( connection_socket, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag) ))
- {
- return OTHER_ERROR;
- }
-
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- long connection::
- write (
- const char* buf,
- long num
- )
- {
- const long old_num = num;
- long status;
- const long max_send_length = 1024*1024*100;
- while (num > 0)
- {
- // Make sure to cap the max value num can take on so that if it is
- // really large (it might be big on 64bit platforms) so that the OS
- // can't possibly get upset about it being large.
- const long length = std::min(max_send_length, num);
- if ( (status = ::send(connection_socket,buf,length,0)) <=0)
- {
- // if send was interupted by a signal then restart it
- if (errno == EINTR)
- {
- continue;
- }
- else
- {
- // check if shutdown or shutdown_outgoing have been called
- if (sdo_called())
- return SHUTDOWN;
- else
- return OTHER_ERROR;
- }
- }
- num -= status;
- buf += status;
- }
- return old_num;
- }
-
-// ----------------------------------------------------------------------------------------
-
- long connection::
- read (
- char* buf,
- long num
- )
- {
- long status;
- const long max_recv_length = 1024*1024*100;
- while (true)
- {
- // Make sure to cap the max value num can take on so that if it is
- // really large (it might be big on 64bit platforms) so that the OS
- // can't possibly get upset about it being large.
- const long length = std::min(max_recv_length, num);
- status = recv(connection_socket,buf,length,0);
- if (status == -1)
- {
- // if recv was interupted then try again
- if (errno == EINTR)
- continue;
- else
- {
- if (sd_called())
- return SHUTDOWN;
- else
- return OTHER_ERROR;
- }
- }
- else if (status == 0 && sd_called())
- {
- return SHUTDOWN;
- }
-
- return status;
- } // while (true)
- }
-// ----------------------------------------------------------------------------------------
-
- long connection::
- read (
- char* buf,
- long num,
- unsigned long timeout
- )
- {
- long status;
- const long max_recv_length = 1024*1024*100;
-
- if (readable(timeout) == false)
- return TIMEOUT;
-
- // Make sure to cap the max value num can take on so that if it is
- // really large (it might be big on 64bit platforms) so that the OS
- // can't possibly get upset about it being large.
- const long length = std::min(max_recv_length, num);
- status = recv(connection_socket,buf,length,0);
- if (status == -1)
- {
- // if recv was interupted then call this a timeout
- if (errno == EINTR)
- {
- return TIMEOUT;
- }
- else
- {
- if (sd_called())
- return SHUTDOWN;
- else
- return OTHER_ERROR;
- }
- }
- else if (status == 0 && sd_called())
- {
- return SHUTDOWN;
- }
-
- return status;
- }
-
-// ----------------------------------------------------------------------------------------
-
- bool connection::
- readable (
- unsigned long timeout
- ) const
- {
- fd_set read_set;
- // initialize read_set
- FD_ZERO(&read_set);
-
- // add the listening socket to read_set
- FD_SET(connection_socket, &read_set);
-
- // setup a timeval structure
- timeval time_to_wait;
- time_to_wait.tv_sec = static_cast<long>(timeout/1000);
- time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);
-
- // wait on select
- int status = select(connection_socket+1,&read_set,0,0,&time_to_wait);
-
- // if select timed out or there was an error
- if (status <= 0)
- return false;
-
- // socket is ready to be read
- return true;
- }
-
-// ----------------------------------------------------------------------------------------
-
- connection::
- ~connection (
- )
- {
- while (true)
- {
- int status = ::close(connection_socket);
- if (status == -1 && errno == EINTR)
- continue;
- break;
- }
- }
-
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // listener object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- listener::
- listener(
- int sock,
- int port,
- const std::string& ip
- ) :
- listening_socket(sock),
- listening_port(port),
- listening_ip(ip),
- inaddr_any(listening_ip.empty())
- {}
-
-// ----------------------------------------------------------------------------------------
-
- listener::
- ~listener (
- )
- {
- while (true)
- {
- int status = ::close(listening_socket);
- if (status == -1 && errno == EINTR)
- continue;
- break;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- int listener::
- accept (
- std::unique_ptr<connection>& new_connection,
- unsigned long timeout
- )
- {
- new_connection.reset(0);
- connection* con;
- int status = this->accept(con, timeout);
-
- if (status == 0)
- new_connection.reset(con);
-
- return status;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int listener::
- accept (
- connection*& new_connection,
- unsigned long timeout
- )
- {
- int incoming;
- sockaddr_in incomingAddr;
- dsocklen_t length = sizeof(sockaddr_in);
-
- // implement timeout with select if timeout is > 0
- if (timeout > 0)
- {
-
- fd_set read_set;
- // initialize read_set
- FD_ZERO(&read_set);
-
- // add the listening socket to read_set
- FD_SET(listening_socket, &read_set);
-
- timeval time_to_wait;
-
-
- // loop on select so if its interupted then we can start it again
- while (true)
- {
-
- // setup a timeval structure
- time_to_wait.tv_sec = static_cast<long>(timeout/1000);
- time_to_wait.tv_usec = static_cast<long>((timeout%1000)*1000);
-
- // wait on select
- int status = select(listening_socket+1,&read_set,0,0,&time_to_wait);
-
- // if select timed out
- if (status == 0)
- return TIMEOUT;
-
- // if select returned an error
- if (status == -1)
- {
- // if select was interupted or the connection was aborted
- // then go back to select
- if (errno == EINTR ||
- errno == ECONNABORTED ||
-#ifdef EPROTO
- errno == EPROTO ||
-#endif
- errno == ECONNRESET
- )
- {
- continue;
- }
- else
- {
- return OTHER_ERROR;
- }
- }
-
- // accept the new connection
- incoming=::accept (
- listening_socket,
- reinterpret_cast<sockaddr*>(&incomingAddr),
- &length
- );
-
- // if there was an error return OTHER_ERROR
- if ( incoming == -1 )
- {
- // if accept was interupted then go back to accept
- if (errno == EINTR ||
- errno == ECONNABORTED ||
-#ifdef EPROTO
- errno == EPROTO ||
-#endif
- errno == ECONNRESET
- )
- {
- continue;
- }
- else
- {
- return OTHER_ERROR;
- }
- }
-
- // if there were no errors then quit loop
- break;
-
- }
-
- }
- // else if there is no time out then just go into accept
- else
- {
- while (true)
- {
- // call accept to get a new connection
- incoming=::accept (
- listening_socket,
- reinterpret_cast<sockaddr*>(&incomingAddr),
- &length
- );
-
- // if there was an error return OTHER_ERROR
- if ( incoming == -1 )
- {
- // if accept was interupted then go back to accept
- if (errno == EINTR ||
- errno == ECONNABORTED ||
-#ifdef EPROTO
- errno == EPROTO ||
-#endif
- errno == ECONNRESET
- )
- {
- continue;
- }
- else
- {
- return OTHER_ERROR;
- }
- }
- break;
- }
-
- }
-
-
- // get the port of the foreign host into foreign_port
- int foreign_port = ntohs(incomingAddr.sin_port);
-
- // get the IP of the foreign host into foreign_ip
- char foreign_ip[16];
- inet_ntop(AF_INET,&incomingAddr.sin_addr,foreign_ip,16);
-
-
-
- // get the local ip for this connection into local_ip
- char temp_local_ip[16];
- std::string local_ip;
- if (inaddr_any == true)
- {
- sockaddr_in local_info;
- length = sizeof(sockaddr_in);
- // get the local sockaddr_in structure associated with this new connection
- if ( getsockname (
- incoming,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == -1
- )
- { // an error occurred
- while (true)
- {
- int status = ::close(incoming);
- if (status == -1 && errno == EINTR)
- continue;
- break;
- }
- return OTHER_ERROR;
- }
- local_ip = const_cast<char*> (
- inet_ntop(AF_INET,&local_info.sin_addr,temp_local_ip,16)
- );
- }
- else
- {
- local_ip = listening_ip;
- }
-
-
-
- // set the SO_OOBINLINE option
- int flag_value = 1;
- if (setsockopt(incoming,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const void*>(&flag_value),sizeof(int)))
- {
- while (true)
- {
- int status = ::close(incoming);
- if (status == -1 && errno == EINTR)
- continue;
- break;
- }
- return OTHER_ERROR;
- }
-
-
-
- // make a new connection object for this new connection
- try
- {
- new_connection = new connection (
- incoming,
- foreign_port,
- foreign_ip,
- listening_port,
- local_ip
- );
- }
- catch (...)
- {
- while (true)
- {
- int status = ::close(incoming);
- if (status == -1 && errno == EINTR)
- continue;
- break;
- }
- return OTHER_ERROR;
- }
-
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // socket creation functions
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- static void
- close_socket (
- int sock
- )
- /*!
- requires
- - sock == a socket
- ensures
- - sock has been closed
- !*/
- {
- while (true)
- {
- int status = ::close(sock);
- if (status == -1 && errno == EINTR)
- continue;
- break;
- }
- }
-
-// ----------------------------------------------------------------------------------------
-
- int create_listener (
- std::unique_ptr<listener>& new_listener,
- unsigned short port,
- const std::string& ip
- )
- {
- new_listener.reset();
- listener* temp;
- int status = create_listener(temp,port,ip);
-
- if (status == 0)
- new_listener.reset(temp);
-
- return status;
- }
-
- int create_listener (
- listener*& new_listener,
- unsigned short port,
- const std::string& ip
- )
- {
- sockets_startup();
-
-
- sockaddr_in sa; // local socket structure
- memset(&sa,'\0',sizeof(sockaddr_in)); // initialize sa
-
-
- int sock = socket (AF_INET, SOCK_STREAM, 0); // get a new socket
-
- // if socket() returned an error then return OTHER_ERROR
- if (sock == -1)
- {
- return OTHER_ERROR;
- }
-
- // set the local socket structure
- sa.sin_family = AF_INET;
- sa.sin_port = htons(port);
- if (ip.empty())
- {
- // if the listener should listen on any IP
- sa.sin_addr.s_addr = htons(INADDR_ANY);
- }
- else
- {
- // if there is a specific ip to listen on
- sa.sin_addr.s_addr = inet_addr(ip.c_str());
-
- // if inet_addr couldn't convert the ip then return an error
- if ( sa.sin_addr.s_addr == ( in_addr_t)(-1))
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
- }
-
- // set the SO_REUSEADDR option
- int flag_value = 1;
- if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,reinterpret_cast<const void*>(&flag_value),sizeof(int)))
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
-
-
- // bind the new socket to the requested port and ip
- if (bind(sock,reinterpret_cast<sockaddr*>(&sa),sizeof(sockaddr_in)) == -1)
- { // if there was an error
- close_socket(sock);
-
- // if the port is already bound then return PORTINUSE
- if (errno == EADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
-
- // tell the new socket to listen
- if ( listen(sock,SOMAXCONN) == -1)
- {
- // if there was an error return OTHER_ERROR
- close_socket(sock);
-
- // if the port is already bound then return PORTINUSE
- if (errno == EADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
- // determine the used local port if necessary
- if (port == 0)
- {
- sockaddr_in local_info;
- dsocklen_t length = sizeof(sockaddr_in);
- if ( getsockname(
- sock,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == -1)
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
- port = ntohs(local_info.sin_port);
- }
-
- // initialize a listener object on the heap with the new socket
- try { new_listener = new listener(sock,port,ip); }
- catch(...) { close_socket(sock); return OTHER_ERROR; }
-
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
- int create_connection (
- std::unique_ptr<connection>& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- )
- {
- new_connection.reset();
- connection* temp;
- int status = create_connection(temp,foreign_port, foreign_ip, local_port, local_ip);
-
- if (status == 0)
- new_connection.reset(temp);
-
- return status;
- }
-
- int
- create_connection (
- connection*& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- )
- {
- sockets_startup();
-
- sockaddr_in local_sa; // local socket structure
- sockaddr_in foreign_sa; // foreign socket structure
- memset(&local_sa,'\0',sizeof(sockaddr_in)); // initialize local_sa
- memset(&foreign_sa,'\0',sizeof(sockaddr_in)); // initialize foreign_sa
-
- dsocklen_t length;
-
- int sock = socket (AF_INET, SOCK_STREAM, 0); // get a new socket
-
- // if socket() returned an error then return OTHER_ERROR
- if (sock == -1 )
- {
- return OTHER_ERROR;
- }
-
- // set the foreign socket structure
- foreign_sa.sin_family = AF_INET;
- foreign_sa.sin_port = htons(foreign_port);
- foreign_sa.sin_addr.s_addr = inet_addr(foreign_ip.c_str());
-
- // if inet_addr couldn't convert the ip then return an error
- if ( foreign_sa.sin_addr.s_addr == ( in_addr_t)(-1))
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
-
-
- // set up the local socket structure
- local_sa.sin_family = AF_INET;
-
- // set the local port
- local_sa.sin_port = htons(local_port);
-
- // set the local ip
- if (local_ip.empty())
- {
- // if the listener should listen on any IP
- local_sa.sin_addr.s_addr = htons(INADDR_ANY);
- }
- else
- {
- // if there is a specific ip to listen on
- local_sa.sin_addr.s_addr = inet_addr(local_ip.c_str());
-
- // if inet_addr couldn't convert the ip then return an error
- if ( local_sa.sin_addr.s_addr == ( in_addr_t)(-1))
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
- }
-
-
-
-
-
- // bind the new socket to the requested local port and local ip
- if ( bind(sock,reinterpret_cast<sockaddr*>(&local_sa),sizeof(sockaddr_in)) == -1)
- { // if there was an error
- close_socket(sock);
-
- // if the port is already bound then return PORTINUSE
- if (errno == EADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
- // connect the socket
- if ( connect (
- sock,
- reinterpret_cast<sockaddr*>(&foreign_sa),
- sizeof(sockaddr_in)
- ) == -1
- )
- {
- close_socket(sock);
- // if the port is already bound then return PORTINUSE
- if (errno == EADDRINUSE)
- return PORTINUSE;
- else
- return OTHER_ERROR;
- }
-
-
- // determine the local port and IP and store them in used_local_ip
- // and used_local_port
- int used_local_port;
- char temp_used_local_ip[16];
- std::string used_local_ip;
- sockaddr_in local_info;
-
- // determine the port
- if (local_port == 0)
- {
- length = sizeof(sockaddr_in);
- if ( getsockname(
- sock,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == -1)
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
- used_local_port = ntohs(local_info.sin_port);
- }
- else
- {
- used_local_port = local_port;
- }
-
- // determine the ip
- if (local_ip.empty())
- {
- // if local_port is not 0 then we must fill the local_info structure
- if (local_port != 0)
- {
- length = sizeof(sockaddr_in);
- if ( getsockname (
- sock,
- reinterpret_cast<sockaddr*>(&local_info),
- &length
- ) == -1
- )
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
- }
- used_local_ip = inet_ntop(AF_INET,&local_info.sin_addr,temp_used_local_ip,16);
- }
- else
- {
- used_local_ip = local_ip;
- }
-
-
- // set the SO_OOBINLINE option
- int flag_value = 1;
- if (setsockopt(sock,SOL_SOCKET,SO_OOBINLINE,reinterpret_cast<const void*>(&flag_value),sizeof(int)))
- {
- close_socket(sock);
- return OTHER_ERROR;
- }
-
-
- // initialize a connection object on the heap with the new socket
- try
- {
- new_connection = new connection (
- sock,
- foreign_port,
- foreign_ip,
- used_local_port,
- used_local_ip
- );
- }
- catch(...) {close_socket(sock); return OTHER_ERROR; }
-
- return 0;
- }
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#endif // POSIX
-
-#endif // DLIB_SOCKETS_KERNEL_2_CPp_
-
diff --git a/ml/dlib/dlib/sockets/sockets_kernel_2.h b/ml/dlib/dlib/sockets/sockets_kernel_2.h
deleted file mode 100644
index f3bc94ec0..000000000
--- a/ml/dlib/dlib/sockets/sockets_kernel_2.h
+++ /dev/null
@@ -1,396 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net), Miguel Grinberg
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_SOCKETS_KERNEl_2_
-#define DLIB_SOCKETS_KERNEl_2_
-
-#ifdef DLIB_ISO_CPP_ONLY
-#error "DLIB_ISO_CPP_ONLY is defined so you can't use this OS dependent code. Turn DLIB_ISO_CPP_ONLY off if you want to use it."
-#endif
-
-#include "../platform.h"
-
-#include "sockets_kernel_abstract.h"
-
-#define _BSD_SOCKLEN_T_
-
-#include <ctime>
-#include <memory>
-#include <string>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <errno.h>
-
-#ifndef HPUX
-#include <sys/select.h>
-#endif
-#include <arpa/inet.h>
-#include <signal.h>
-#include <inttypes.h>
-#include <netdb.h>
-#include <unistd.h>
-#include <sys/param.h>
-
-#include <netinet/in.h>
-
-#include "../threads.h"
-#include "../algs.h"
-
-
-
-
-namespace dlib
-{
-
-// ----------------------------------------------------------------------------------------
-
- // forward declarations
- class socket_factory;
- class listener;
-
-// ----------------------------------------------------------------------------------------
-
- // lookup functions
-
- int
- get_local_hostname (
- std::string& hostname
- );
-
-// -----------------
-
- int
- hostname_to_ip (
- const std::string& hostname,
- std::string& ip,
- int n = 0
- );
-
-// -----------------
-
- int
- ip_to_hostname (
- const std::string& ip,
- std::string& hostname
- );
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // connection object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- class connection
- {
- /*!
- INITIAL_VALUE
- sd == false
- sdo == false
- sdr == 0
-
-
- CONVENTION
- connection_socket == the socket handle for this connection.
- connection_foreign_port == the port that foreign host is using for
- this connection
- connection_foreign_ip == a string containing the IP address of the
- foreign host
- connection_local_port == the port that the local host is using for
- this connection
- connection_local_ip == a string containing the IP address of the
- local interface being used by this connection
-
- sd == if shutdown() has been called then true
- else false
- sdo == if shutdown_outgoing() has been called then true
- else false
- sdr == the return value of shutdown() if it has been
- called. if it hasn't been called then 0
-
-
- !*/
-
- friend class listener; // make listener a friend of connection
- // make create_connection a friend of connection
- friend int create_connection (
- connection*& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port,
- const std::string& local_ip
- );
-
- public:
-
- ~connection();
-
- void* user_data;
-
- long write (
- const char* buf,
- long num
- );
-
- long read (
- char* buf,
- long num
- );
-
- long read (
- char* buf,
- long num,
- unsigned long timeout
- );
-
- int get_local_port (
- ) const { return connection_local_port; }
-
- int get_foreign_port (
- ) const { return connection_foreign_port; }
-
- const std::string& get_local_ip (
- ) const { return connection_local_ip; }
-
- const std::string& get_foreign_ip (
- ) const { return connection_foreign_ip; }
-
- int shutdown_outgoing (
- )
- {
- sd_mutex.lock();
- if (sdo || sd)
- {
- sd_mutex.unlock();
- return sdr;
- }
- sdo = true;
- sdr = ::shutdown(connection_socket,SHUT_WR);
- int temp = sdr;
- sd_mutex.unlock();
- return temp;
- }
-
- int shutdown (
- )
- {
- sd_mutex.lock();
- if (sd)
- {
- sd_mutex.unlock();
- return sdr;
- }
- sd = true;
- sdr = ::shutdown(connection_socket,SHUT_RDWR);
- int temp = sdr;
- sd_mutex.unlock();
- return temp;
- }
-
- int disable_nagle(
- );
-
- typedef int socket_descriptor_type;
-
- socket_descriptor_type get_socket_descriptor (
- ) const { return connection_socket; }
-
- private:
-
- bool readable (
- unsigned long timeout
- ) const;
- /*!
- requires
- - timeout < 2000000
- ensures
- - returns true if a read call on this connection will not block.
- - returns false if a read call on this connection will block or if
- there was an error.
- !*/
-
- bool sd_called (
- )const
- /*!
- ensures
- - returns true if shutdown() has been called else
- - returns false
- !*/
- {
- sd_mutex.lock();
- bool temp = sd;
- sd_mutex.unlock();
- return temp;
- }
-
- bool sdo_called (
- )const
- /*!
- ensures
- - returns true if shutdown_outgoing() or shutdown() has been called
- else returns false
- !*/
- {
- sd_mutex.lock();
- bool temp = false;
- if (sdo || sd)
- temp = true;
- sd_mutex.unlock();
- return temp;
- }
-
-
- // data members
- int connection_socket;
- const int connection_foreign_port;
- const std::string connection_foreign_ip;
- const int connection_local_port;
- const std::string connection_local_ip;
-
- bool sd; // called shutdown
- bool sdo; // called shutdown_outgoing
- int sdr; // return value for shutdown
- mutex sd_mutex; // a lock for the three above vars
-
- connection(
- int sock,
- int foreign_port,
- const std::string& foreign_ip,
- int local_port,
- const std::string& local_ip
- );
- /*!
- requires
- - sock is a socket handle
- - sock is the handle for the connection between foreign_ip:foreign_port
- and local_ip:local_port
- ensures
- - *this is initialized correctly with the above parameters
- !*/
-
-
- // restricted functions
- connection();
- connection(connection&); // copy constructor
- connection& operator=(connection&); // assignement opertor
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // listener object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- class listener
- {
- /*!
- CONVENTION
- if (inaddr_any == false)
- {
- listening_ip == a string containing the address the listener is
- listening on
- }
- else
- {
- the listener is listening on all interfaces
- }
-
- listening_port == the port the listener is listening on
- listening_socket == the listening socket handle for this object
- !*/
-
- // make the create_listener a friend of listener
- friend int create_listener (
- listener*& new_listener,
- unsigned short port,
- const std::string& ip
- );
-
- public:
-
- ~listener();
-
- int accept (
- connection*& new_connection,
- unsigned long timeout = 0
- );
-
- int accept (
- std::unique_ptr<connection>& new_connection,
- unsigned long timeout = 0
- );
-
- int get_listening_port (
- ) const { return listening_port; }
-
- const std::string& get_listening_ip (
- ) const { return listening_ip; }
-
- private:
-
- // data members
- int listening_socket;
- const int listening_port;
- const std::string listening_ip;
- const bool inaddr_any;
-
- listener(
- int sock,
- int port,
- const std::string& ip
- );
- /*!
- requires
- - sock is a socket handle
- - sock is listening on the port and ip(may be "") indicated in the above
- parameters
- ensures
- - *this is initialized correctly with the above parameters
- !*/
-
-
- // restricted functions
- listener();
- listener(listener&); // copy constructor
- listener& operator=(listener&); // assignement opertor
- };
-
-// ----------------------------------------------------------------------------------------
-
- int create_listener (
- listener*& new_listener,
- unsigned short port,
- const std::string& ip = ""
- );
-
- int create_connection (
- connection*& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port = 0,
- const std::string& local_ip = ""
- );
-
- int create_listener (
- std::unique_ptr<listener>& new_listener,
- unsigned short port,
- const std::string& ip = ""
- );
-
- int create_connection (
- std::unique_ptr<connection>& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port = 0,
- const std::string& local_ip = ""
- );
-
-// ----------------------------------------------------------------------------------------
-
-}
-
-#ifdef NO_MAKEFILE
-#include "sockets_kernel_2.cpp"
-#endif
-
-#endif // DLIB_SOCKETS_KERNEl_2_
-
diff --git a/ml/dlib/dlib/sockets/sockets_kernel_abstract.h b/ml/dlib/dlib/sockets/sockets_kernel_abstract.h
deleted file mode 100644
index d4571acad..000000000
--- a/ml/dlib/dlib/sockets/sockets_kernel_abstract.h
+++ /dev/null
@@ -1,495 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#undef DLIB_SOCKETS_KERNEl_ABSTRACT_
-#ifdef DLIB_SOCKETS_KERNEl_ABSTRACT_
-
-#include <string>
-#include "../threads.h"
-
-namespace dlib
-{
-
-// ----------------------------------------------------------------------------------------
-
- /*!
- GENERAL COMMENTS:
- Nothing in here will throw exceptions.
-
- All ip address strings in this file refer to IPv4 addresses. For
- example "192.168.1.1"
-
- Timeouts:
- All timeout values are measured in milliseconds but you are not
- guaranteed to have that level of resolution. The actual resolution
- is implementation defined.
-
- GENERAL WARNING
- Don't call any of these functions or make any of these objects
- before main() has been entered.
-
- EXCEPTIONS
- Unless specified otherwise, nothing in this file throws exceptions.
- !*/
-
-// ----------------------------------------------------------------------------------------
-
- // LOOKUP FUNCTIONS
-
- // all lookup functions are thread-safe
-
- int get_local_hostname (
- std::string& hostname
- );
- /*!
- ensures
- - if (#get_local_hostname() == 0) then
- - #hostname == a string containing the hostname of the local computer
-
- - returns 0 upon success
- - returns OTHER_ERROR upon failure and in this case #hostname's value
- is undefined
- !*/
-
-// -----------------
-
- int hostname_to_ip (
- const std::string& hostname,
- std::string& ip,
- int n = 0
- );
- /*!
- requires
- - n >= 0
- ensures
- - if (#hostname_to_ip() == 0) then
- - #ip == string containing the nth ip address associated with the hostname
-
- - returns 0 upon success
- - returns OTHER_ERROR upon failure
- !*/
-
-// -----------------
-
- int ip_to_hostname (
- const std::string& ip,
- std::string& hostname
- );
- /*!
- ensures
- - if (#ip_to_hostname() == 0) then
- - #hostname == string containing the hostname associated with ip
-
- - returns 0 upon success
- - returns OTHER_ERROR upon failure
- !*/
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- //
- // socket creation functions
- //
- // The following functions are guaranteed to be thread-safe
- //
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- int create_listener (
- listener*& new_listener,
- unsigned short port,
- const std::string& ip = ""
- );
- /*!
- requires
- - 0 <= port <= 65535
- ensures
- - if (#create_listener() == 0) then
- - #new_listener == a pointer to a listener object that is listening on
- the specified port and ip for an incoming connection
- - if (ip == "") then
- - the new listener will be listening on all interfaces
- - if (port == 0) then
- - the operating system will assign a free port to listen on
-
-
- - returns 0 if create_listener was successful
- - returns PORTINUSE if the specified local port was already in use
- - returns OTHER_ERROR if some other error occurred
- !*/
-
- int create_listener (
- std::unique_ptr<listener>& new_listener,
- unsigned short port,
- const std::string& ip = ""
- );
- /*!
- This function is just an overload of the above function but it gives you a
- std::unique_ptr smart pointer instead of a C pointer.
- !*/
-
- int create_connection (
- connection*& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port = 0,
- const std::string& local_ip = ""
- );
- /*!
- requires
- - 0 < foreign_port <= 65535
- - 0 <= local_port <= 65535
- ensures
- - if (#create_connection() == 0) then
- - #new_connection == a pointer to a connection object that is connected
- to foreign_ip on port foreign_port and is using the local interface
- local_ip and local port local_port
- - #new_connection->user_data == 0
- - if (local_ip == "") then
- - the operating system will chose this for you
- - if (local_port == 0) then
- - the operating system will chose this for you
-
- - returns 0 if create_connection was successful
- - returns PORTINUSE if the specified local port was already in use
- - returns OTHER_ERROR if some other error occurred
- !*/
-
- int create_connection (
- std::unique_ptr<connection>& new_connection,
- unsigned short foreign_port,
- const std::string& foreign_ip,
- unsigned short local_port = 0,
- const std::string& local_ip = ""
- );
- /*!
- This function is just an overload of the above function but it gives you a
- std::unique_ptr smart pointer instead of a C pointer.
- !*/
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // connection object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- class connection
- {
- /*!
- WHAT THIS OBJECT REPRESENTS
- This object represents a TCP connection.
-
- Instances of this class can only be created by using the
- create_connection function or listener class defined below.
-
- NOTE:
- A connection object must ALWAYS be closed (delete the pointer to the
- connection) or it will cause a resource leak.
-
- Note also that all errors indicated by a return code of OTHER_ERROR
- are fatal so if one occurs the connection should just be closed.
-
- CLOSING A CONNECTION
- Note that if ~connection() or shutdown() is called before the remote client
- has received all sent data it is possible that the data will be lost. To
- avoid this you should call the close_gracefully() function to close your
- connections (unless you actually do want to immediately dispose of a
- connection and don't care about the data).
- (example: close_gracefully(con); // close con gracefully but force it closed
- // if it takes more than 500 milliseconds.)
-
- THREAD SAFETY
- - It is always safe to call shutdown() or shutdown_outgoing().
- - you may NOT call any function more than once at a time (except the
- shutdown functions).
- - do not call read() more than once at a time
- - do not call write() more than once at a time
- - You can safely call shutdown or shutdown_outgoing in conjunction with
- the read/write functions.
- This is helpful if you want to unblock another thread that is
- blocking on a read/write operation. Shutting down the connection
- will cause the read/write functions to return a value of SHUTDOWN.
-
- OUT-OF-BAND DATA:
- All out-of-band data will be put inline into the normal data stream.
- This means that you can read any out-of-band data via calls to read().
- (i.e. the SO_OOBINLINE socket option will be set)
- !*/
-
- public:
-
- ~connection (
- );
- /*!
- requires
- - no other threads are using this connection object
- ensures
- - closes the connection (this is an abrupt non-graceful close)
- - frees the resources used by this object
- !*/
-
- void* user_data;
- /*!
- This pointer is provided so that the client programmer may easily associate
- some data with a connection object. You can really do whatever you want
- with it. Initially user_data is 0.
- !*/
-
- long write (
- const char* buf,
- long num
- );
- /*!
- requires
- - num > 0
- - buf points to an array of at least num bytes
- ensures
- - will block until ONE of the following occurs:
- - num bytes from buf have been written to the connection
- - an error has occurred
- - the outgoing channel of the connection has been shutdown locally
-
- - returns num if write succeeded
- - returns OTHER_ERROR if there was an error (this could be due to a
- connection close)
- - returns SHUTDOWN if the outgoing channel of the connection has been
- shutdown locally
- !*/
-
- long read (
- char* buf,
- long num
- );
- /*!
- requires
- - num > 0
- - buf points to an array of at least num bytes
- ensures
- - read() will not read more than num bytes of data into #buf
- - read blocks until ONE of the following happens:
- - there is some data available and it has been written into #buf
- - the remote end of the connection is closed
- - an error has occurred
- - the connection has been shutdown locally
-
- - returns the number of bytes read into #buf if there was any data.
- - returns 0 if the connection has ended/terminated and there is no more data.
- - returns OTHER_ERROR if there was an error.
- - returns SHUTDOWN if the connection has been shutdown locally
- !*/
-
- long read (
- char* buf,
- long num,
- unsigned long timeout
- );
- /*!
- requires
- - num > 0
- - buf points to an array of at least num bytes
- - timeout < 2000000
- ensures
- - read() will not read more than num bytes of data into #buf
- - if (timeout > 0) then read() blocks until ONE of the following happens:
- - there is some data available and it has been written into #buf
- - the remote end of the connection is closed
- - an error has occurred
- - the connection has been shutdown locally
- - timeout milliseconds has elapsed
- - else
- - read() does not block
-
- - returns the number of bytes read into #buf if there was any data.
- - returns 0 if the connection has ended/terminated and there is no more data.
- - returns TIMEOUT if timeout milliseconds elapsed before we got any data.
- - returns OTHER_ERROR if there was an error.
- - returns SHUTDOWN if the connection has been shutdown locally
- !*/
-
- unsigned short get_local_port (
- ) const;
- /*!
- ensures
- - returns the local port number for this connection
- !*/
-
- unsigned short get_foreign_port (
- ) const;
- /*!
- ensures
- - returns the foreign port number for this connection
- !*/
-
- const std::string& get_local_ip (
- ) const;
- /*!
- ensures
- - returns the IP of the local interface this connection is using
- !*/
-
- const std::string& get_foreign_ip (
- ) const;
- /*!
- ensures
- - returns the IP of the foreign host for this connection
- !*/
-
- int shutdown (
- );
- /*!
- ensures
- - if (#shutdown() == 0 && connection was still open) then
- - terminates the connection but does not free the resources for the
- connection object
-
- - any read() or write() calls on this connection will return immediately
- with the code SHUTDOWN.
-
- - returns 0 upon success
- - returns OTHER_ERROR if there was an error
- !*/
-
- int shutdown_outgoing (
- );
- /*!
- ensures
- - if (#shutdown_outgoing() == 0 && outgoing channel was still open) then
- - sends a FIN to indicate that no more data will be sent on this
- connection but leaves the receive half of the connection open to
- receive more data from the other host
-
- - any calls to write() will return immediately with the code SHUTDOWN.
-
- - returns 0 upon success
- - returns OTHER_ERROR if there was an error
- !*/
-
- int disable_nagle(
- );
- /*!
- ensures
- - Sets the TCP_NODELAY socket option to disable Nagle's algorithm.
- This can sometimes reduce transmission latency, however, in almost
- all normal cases you don't want to mess with this as the default
- setting is usually appropriate.
-
- - returns 0 upon success
- - returns OTHER_ERROR if there was an error
- !*/
-
- typedef platform_specific_type socket_descriptor_type;
- socket_descriptor_type get_socket_descriptor (
- ) const;
- /*!
- ensures
- - returns the underlying socket descriptor for this connection
- object. The reason you might want access to this is to
- pass it to some other library that requires a socket file
- descriptor. However, if you do this then you probably shouldn't
- use the dlib::connection read() and write() anymore since
- whatever you are doing with the socket descriptor is probably
- doing I/O with the socket.
- !*/
-
- private:
- // restricted functions
- connection();
- connection(connection&); // copy constructor
- connection& operator=(connection&); // assignment operator
-
- };
-
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
- // listener object
-// ----------------------------------------------------------------------------------------
-// ----------------------------------------------------------------------------------------
-
- class listener
- {
- /*!
- WHAT THIS OBJECT REPRESENTS
- This object represents a TCP socket waiting for incoming connections.
- Calling accept returns a pointer to any new incoming connections on its
- port.
-
- Instances of this class can only be created by using the
- create_listener function defined below.
-
- NOTE:
- A listener object must ALWAYS be closed (delete the pointer to it) or
- it will cause a resource leak.
-
- Note also that all errors indicated by a return code of OTHER_ERROR
- are fatal so if one occurs the listener should be closed.
-
- THREAD SAFETY
- None of the functions in this object are guaranteed to be thread-safe.
- This means that you must serialize all access to this object.
- !*/
-
- public:
-
- ~listener (
- );
- /*!
- requires
- - no other threads are using this listener object
- ensures
- - closes the listener
- - frees the resources used by this object
- !*/
-
- int accept (
- connection*& new_connection,
- unsigned long timeout = 0
- );
- /*!
- requires
- - timeout < 2000000
- ensures
- - blocks until a new connection is ready or timeout milliseconds have
- elapsed.
- - #new_connection == a pointer to the new connection object
- - #new_connection->user_data == 0
- - if (timeout == 0) then
- - the timeout argument is ignored
-
- - returns 0 if accept() was successful
- - returns TIMEOUT if timeout milliseconds have elapsed
- - returns OTHER_ERROR if an error has occurred
- !*/
-
- int accept (
- std::unique_ptr<connection>& new_connection,
- unsigned long timeout = 0
- );
- /*!
- This function is just an overload of the above function but it gives you a
- std::unique_ptr smart pointer instead of a C pointer.
- !*/
-
- unsigned short get_listening_port (
- ) const;
- /*!
- ensures
- - returns the port number that this object is listening on
- !*/
-
- const std::string& get_listening_ip (
- ) const;
- /*!
- ensures
- - returns a string containing the IP (e.g. "127.0.0.1") of the
- interface this object is listening on
- - returns "" if it is accepting connections on all interfaces
- !*/
-
- private:
- // restricted functions
- listener();
- listener(listener&); // copy constructor
- listener& operator=(listener&); // assignment operator
- };
-}
-
-#endif // DLIB_SOCKETS_KERNEl_ABSTRACT_
-
diff --git a/ml/dlib/dlib/sockets/windows.h b/ml/dlib/dlib/sockets/windows.h
deleted file mode 100644
index 85b7fd8d8..000000000
--- a/ml/dlib/dlib/sockets/windows.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright (C) 2003 Davis E. King (davis@dlib.net)
-// License: Boost Software License See LICENSE.txt for the full license.
-#ifndef DLIB_SOCKETS_KERNEl_2_
-#include "sockets_kernel_1.h"
-#endif
-