Merge pull request #13 from curtpm/master
Allow user to set socket flags for server creation
This commit is contained in:
commit
fd0828fb86
14
httplib.h
14
httplib.h
@ -135,7 +135,7 @@ public:
|
|||||||
void set_error_handler(Handler handler);
|
void set_error_handler(Handler handler);
|
||||||
void set_logger(Logger logger);
|
void set_logger(Logger logger);
|
||||||
|
|
||||||
bool listen(const char* host, int port);
|
bool listen(const char* host, int port, int socket_flags = 0);
|
||||||
void stop();
|
void stop();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -316,7 +316,7 @@ inline int shutdown_socket(socket_t sock)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename Fn>
|
template <typename Fn>
|
||||||
socket_t create_socket(const char* host, int port, Fn fn)
|
socket_t create_socket(const char* host, int port, Fn fn, int socket_flags = 0)
|
||||||
{
|
{
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
int opt = SO_SYNCHRONOUS_NONALERT;
|
int opt = SO_SYNCHRONOUS_NONALERT;
|
||||||
@ -330,7 +330,7 @@ socket_t create_socket(const char* host, int port, Fn fn)
|
|||||||
memset(&hints, 0, sizeof(struct addrinfo));
|
memset(&hints, 0, sizeof(struct addrinfo));
|
||||||
hints.ai_family = AF_UNSPEC;
|
hints.ai_family = AF_UNSPEC;
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
hints.ai_flags = 0;
|
hints.ai_flags = socket_flags;
|
||||||
hints.ai_protocol = 0;
|
hints.ai_protocol = 0;
|
||||||
|
|
||||||
auto service = std::to_string(port);
|
auto service = std::to_string(port);
|
||||||
@ -363,7 +363,7 @@ socket_t create_socket(const char* host, int port, Fn fn)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline socket_t create_server_socket(const char* host, int port)
|
inline socket_t create_server_socket(const char* host, int port, int socket_flags)
|
||||||
{
|
{
|
||||||
return create_socket(host, port, [](socket_t sock, struct addrinfo& ai) -> socket_t {
|
return create_socket(host, port, [](socket_t sock, struct addrinfo& ai) -> socket_t {
|
||||||
if (::bind(sock, ai.ai_addr, ai.ai_addrlen)) {
|
if (::bind(sock, ai.ai_addr, ai.ai_addrlen)) {
|
||||||
@ -373,7 +373,7 @@ inline socket_t create_server_socket(const char* host, int port)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
}, socket_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline socket_t create_client_socket(const char* host, int port)
|
inline socket_t create_client_socket(const char* host, int port)
|
||||||
@ -854,9 +854,9 @@ inline void Server::set_logger(Logger logger)
|
|||||||
logger_ = logger;
|
logger_ = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool Server::listen(const char* host, int port)
|
inline bool Server::listen(const char* host, int port, int socket_flags)
|
||||||
{
|
{
|
||||||
svr_sock_ = detail::create_server_socket(host, port);
|
svr_sock_ = detail::create_server_socket(host, port, socket_flags);
|
||||||
if (svr_sock_ == -1) {
|
if (svr_sock_ == -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user