1
0
mirror of synced 2025-04-20 11:47:43 +03:00

Merge pull request #13 from curtpm/master

Allow user to set socket flags for server creation
This commit is contained in:
yhirose 2017-08-29 18:27:49 -04:00 committed by GitHub
commit fd0828fb86

View File

@ -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;
} }