diff options
| -rw-r--r-- | src/sender.cc | 22 | ||||
| -rw-r--r-- | src/sender_client.cc | 2 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/sender.cc b/src/sender.cc index e9b4a94..d43042e 100644 --- a/src/sender.cc +++ b/src/sender.cc @@ -222,6 +222,21 @@ void queue_message(const std::string& channel, const std::string& message) { g_info.requests.emplace_back(g_info.multi, g_info.url, obj->str()); } +bool make_nonblock(int sock) { + int flags = fcntl(sock, F_GETFL, 0); + if (flags < 0) { + return false; + } + if (!(flags & O_NONBLOCK)) { + flags |= O_NONBLOCK; + if (fcntl(sock, F_SETFL, flags) < 0) { + return false; + } + } + return true; +} + + } // namespace int main() { @@ -311,9 +326,15 @@ int main() { goto error; } + make_nonblock(sock_); + { int value = 1; +#ifdef SO_REUSEPORT setsockopt(sock_, SOL_SOCKET, SO_REUSEPORT, &value, sizeof(value)); +#else + setsockopt(sock_, SOL_SOCKET, SO_REUSEADDR, &value, sizeof(value)); +#endif } signal(SIGPIPE, SIG_IGN); @@ -392,6 +413,7 @@ int main() { std::cerr << "Accept failed: " << strerror(errno); goto error; } + make_nonblock(sock); if (clients.size() == MAX_CLIENTS) { // Remove oldest clients.erase(clients.begin()); diff --git a/src/sender_client.cc b/src/sender_client.cc index f954a5c..9b89ed5 100644 --- a/src/sender_client.cc +++ b/src/sender_client.cc @@ -32,7 +32,7 @@ public: if (!config) return false; sender_ = config->get("sender", ""); if (sender_.empty()) return false; - return setup(); + return true; } void send(const std::string& channel, const std::string& message) override { |
