Commit 3fd5d5bd authored by Dominik Charousset's avatar Dominik Charousset

add SO_REUSEADDR flag to acceptor sockets, closes #63

parent e2680cdb
...@@ -99,13 +99,17 @@ ipv4_acceptor::ipv4_acceptor(native_socket_type fd, bool nonblocking) ...@@ -99,13 +99,17 @@ ipv4_acceptor::ipv4_acceptor(native_socket_type fd, bool nonblocking)
std::unique_ptr<util::acceptor> ipv4_acceptor::create(std::uint16_t port) { std::unique_ptr<util::acceptor> ipv4_acceptor::create(std::uint16_t port) {
native_socket_type sockfd; native_socket_type sockfd;
struct sockaddr_in serv_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0); sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == invalid_socket) { if (sockfd == invalid_socket) {
throw network_error("could not create server socket"); throw network_error("could not create server socket");
} }
// sguard closes the socket in case of exception // sguard closes the socket in case of exception
socket_guard sguard(sockfd); socket_guard sguard(sockfd);
int on = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) {
detail::throw_io_failure("unable to set SO_REUSEADDR");
}
struct sockaddr_in serv_addr;
memset((char*) &serv_addr, 0, sizeof(serv_addr)); memset((char*) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET; serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_addr.s_addr = INADDR_ANY;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment