aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/vespa/vespalib/portal/listener.h
blob: eba60f9b6e2b3b21991b313492a9a1ab21421afb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#pragma once

#include "reactor.h"
#include <vespa/vespalib/net/server_socket.h>
#include <functional>

namespace vespalib::portal {

class Listener : public Reactor::EventHandler
{
private:
    ServerSocket _server_socket;
    std::function<void(SocketHandle)> _handler;
    Reactor::Token::UP _token;
public:
    using UP = std::unique_ptr<Listener>;
    Listener(Reactor &reactor, int port, std::function<void(SocketHandle)> handler);
    ~Listener();
    int listen_port() const { return _server_socket.address().port(); }
    void handle_event(bool read, bool write) override;
};

} // namespace vespalib::portal