blob: 1b4136d74e3246010ac770f13d5baf2337bc8307 [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_BASE_SOCKETSERVER_H_
12#define WEBRTC_BASE_SOCKETSERVER_H_
13
14#include "webrtc/base/socketfactory.h"
15
16namespace rtc {
17
18class MessageQueue;
honghaizcec0a082016-01-15 14:49:09 -080019class NetworkBinderInterface;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000020
21// Provides the ability to wait for activity on a set of sockets. The Thread
22// class provides a nice wrapper on a socket server.
23//
24// The server is also a socket factory. The sockets it creates will be
25// notified of asynchronous I/O from this server's Wait method.
26class SocketServer : public SocketFactory {
27 public:
andresp@webrtc.org53d90122015-02-09 14:19:09 +000028 static const int kForever = -1;
29
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000030 // When the socket server is installed into a Thread, this function is
31 // called to allow the socket server to use the thread's message queue for
32 // any messaging that it might need to perform.
33 virtual void SetMessageQueue(MessageQueue* queue) {}
34
35 // Sleeps until:
36 // 1) cms milliseconds have elapsed (unless cms == kForever)
37 // 2) WakeUp() is called
38 // While sleeping, I/O is performed if process_io is true.
39 virtual bool Wait(int cms, bool process_io) = 0;
40
41 // Causes the current wait (if one is in progress) to wake up.
42 virtual void WakeUp() = 0;
honghaizcec0a082016-01-15 14:49:09 -080043
44 // A network binder will bind the created sockets to a network.
45 // It is only used in PhysicalSocketServer.
46 void set_network_binder(NetworkBinderInterface* binder) {
47 network_binder_ = binder;
48 }
49 NetworkBinderInterface* network_binder() const { return network_binder_; }
50
51 private:
52 NetworkBinderInterface* network_binder_ = nullptr;
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000053};
54
55} // namespace rtc
56
57#endif // WEBRTC_BASE_SOCKETSERVER_H_