This repository has been archived by the owner on Feb 3, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
socketmonitor.h
executable file
·65 lines (48 loc) · 2.67 KB
/
socketmonitor.h
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/* Monitor de datos en el socket. Equivalente a select() y las macros
relacionadas.
*/
#ifndef SOCKETMONITOR_H
#define SOCKETMONITOR_H
#include <QDebug>
#include <set>
#include <time.h>
#include <sys/select.h>
#include <string.h>
#include <errno.h>
#include "socket.h"
typedef std::set<Socket *, SockComp> sockset; // Definiendo el tipo de conjunto de sockets.
enum fdSet{READ, WRITE, EXCEPTION}; // Conjuntos a los que se pueden agregar sockets
class SocketMonitor
{
private:
int max_fd; // Valor más alto de alguno de los descriptores de archivo.
fd_set readfds; // Conjunto de descriptores a leer.
fd_set writefds; // Conjunto de descriptores a escribir.
fd_set exceptfds; // Conjunto de descriptores a de excepción.
struct timeval * utimeout; // Estructura para timeout (select()).
// Instancias para la gestión a más alto nivel.
sockset readSet; // Conjunto de sockets para lectura.
sockset writeSet; // Conjunto de sockets para escritura.
sockset exceptSet; // Conjunto de sockets exepción. (errores).
sockset::const_iterator it; // Iterador sobre los conjuntos de sockets.
public:
SocketMonitor();
void clearFrom(Socket & s, fdSet set); // Remueve el socket especificado del conjunto dado.
bool isSet(Socket & s, fdSet set); // Verifica si un socket ha tenido cambios.
void set(Socket & s, fdSet set); // Asigna un socket al conjunto.
void zeroSet(fdSet set); // Inicializa el conjunto a cero. El constructor por
// defecto inicializa todos los conjuntos.
// int select(sockset & readSocks, // Llena el los conjuntos de sockets, con los
// sockset & writeSocks, // sockets disponibles para las respectivas
// sockset & excepSocks, // operaciones.
// struct timeval * timeout = NULL);
int select(struct timeval * timeout = NULL); // Hace la operación de select sobre los descriptores
// que previamente se añadieron con set().
void setTimeout(struct timeval * timeout); // Asigna el timeout para la operación select.
private:
void getMaxFd(); // Actualiza max_fd, tras haberse elminiado el socket
// de valor más alto.
void init_sets(); // Inicializa los conjuntos de descriptores tras cada
// llamada a select().
};
#endif // SOCKETMONITOR_H