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
/
socket.h
executable file
·86 lines (63 loc) · 3.58 KB
/
socket.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* Socket abstract class.
Empleada por las clases de sockets más específicos
como sockets de la familia AF_INET.
Cada familia de sockets que se añada deberá implementar los métodos
virtuales puros aquí descritos.
*/
#ifndef SOCKET_H
#define SOCKET_H
#include <QDebug>
#include <QString>
// --- Cabeceras UNIX ---
// Funciones de socket.
#include <sys/socket.h>
// Close.
#include <unistd.h>
// Errores
#include <string.h>
#include <errno.h>
#include "sockaddr.h"
class Socket
{
protected:
int sock_d; // Descriptor de archivo del socket.
int domain; // Dominio del socket.
int type; // Tipo de socket.
int protocol; // Protocolo a filtrar.
int level; // Nivel de la API de sockets.
public:
Socket(); // Inicializa sock_d a un valor inválido (-1).
Socket(int domain, int type, int protocol); // Abre el socket con los parámetros indicados.
int descriptor(); // Regresa el descriptor de archivo.
// Puede llegar a ser usado en funciones de
// enviar y recibir trama.
void close(); // Cierra el socket.
virtual void open(int domain, int type, int protocol); // Abre el socket sólo si se ha usado
// el constructor por defecto.
// virtual Socket accept() = 0; // Empleado en SOCK_STREAM y SOCK_SEQPACKET.
// No se implmenta aquí.
virtual void bind(SockAddr &) = 0; // Aignar a una dirección y puerto locales al socket
// virtual void listen() = 0; // Tells the socket that new connections shall be accepted.
// Usado con SOCK_STREM y SOCK_SEQPACKET.
// No se implmenta aquí.
virtual int sendTo(const void * message, // Envía mensajes a través del socket.
size_t length,
SockAddr & dstaddr) = 0;
virtual int recvFrom(void * buffer, // Recibe mensajes a través del socket.
size_t length,
SockAddr & from) = 0;
// virtual void setSockOpt(Socket &, int optionName,
// void * optionValue, socklen_t len) = 0; // Asigna opciones al socket.
// virtual void getSockOpt() = 0; // Obtiene opciones del socket.
// virtual void getSockName() = 0; // Devuelve la dirección a la que se ha hecho bind.
protected:
int open_sock(int domain, int type, int protocol); // Empleada por el constructor y open.
// En caso de error al abrir el socket lanza excepción.
};
class SockComp{
public:
bool operator()(Socket * s1, Socket * s2) const{
return (s1->descriptor() < s2->descriptor());
}
};
#endif // SOCKET_H