Add socket file info on root

This commit is contained in:
2014-03-25 23:54:17 +01:00
parent 5556fc6196
commit 7169a2a79f

105
socket.txt Normal file
View File

@@ -0,0 +1,105 @@
Definizione
Letteralmente significa presa (di corrente). Realizzano l'astrazione di canali
di comunicazione fra due computer connessi da una rete. Una coppia di socket
consente la comunicazione.
Concatenazione di un indirizzo IP e di una porta. Un socket individua
univocamente un processo in esecuzione su un dato host.
Indirizzo ip
Stringa di 32 bit
Rappresentazione decimale
Numeri di porta
porta ben note da 0 a 1023
porta da 1024 a 49151 (possono essere registrate per servizi)
porte dinamiche da 49152 a 65535 (non registrabili, usabili liberamente).
Socket API
Collezione di strutture dati e di funzioni che permettono al programmatore di
scrivere in modo semplice programmi in grado di comunicare sulla interrete.
Permette di: creare socket - leggere dati - scrivere dati sul canale
Comunicazione client-server
Client Server
socket() socket()
1.connect() bind()
2.write() listen()
3.read() accept()
4.close() 1.
2.read()
3.write()
4.read()
close()
Abbiamo le seguenti fasi:
In attesa di una connessione, fase di preparazione (Server)
Scambio di dati Client-Server
Rappresentazione di un Socket
struct in_addr
struct sockaddr_in {
unit8_t sin_len;
sa_family_t sin_family; //tipo di protocollo
in_port_t sin_port; // 16-bit network byte ordered
struct in_addr sin addr; // struttura indirizzo IP
}
struct sockaddr {
unit8_t sin_len;
sa_family_t sin_family;
char sa_data[14];
}
Funzioni principali
#include <sys/socket.h>
int socket(int family,int type, int protocol) //Definisco il protocollo
return -1 //Error
return Socket descriptor (é come un file descriptor)
[ int family
AF_INET IPv4
AF_INET6 IPv6
AF_LOCAL
AF_ROUTE
altri...
type
SOCK_STREAM
protocol
0 //lascia fare al sistema
]
int connect(int sd, struct sockaddr *servaddr, socklen_t addrlen);
-Permette di aprire una connessione client-server
-Il kernel sceglie una porta e l'indirizzo IP
-Viene effettuata la fase di handshake, in caso di errore ritorna
-ETIMEDOUT //Passa troppo tempo
-ECONNREFUSED //Connessione rifiutata
-EHOSTUNREACH //Host non raggiungibile
int bind(int sd, struct sockaddr*myaddr, sockelen_t addrlen);
-Permette ad un server di assegnare un indirizzo per il server al socket
-Tipo indirizzo: IP - Porta - Entrambi - Nessuno (Sceglie sistema)
-Default : 0
int listen(int sd, int backlog);
-Permette di convertire il socket da attivo a passivo in modo che il kernel
accetti connessioni sul socket
Default socket attivo.
-Permette con backlog di specificare quante connessioni possono essere
attivate
int accept(int sd, struct sockaddr*cliaddr, socklen_t *addrlen);
-Permette ad un server di prendere la prima connessione completata dalla coda
Se non ce ne sono si blocca
-addrlen è un parametro valore-risultato
In chiamata contiene il valore della struttura passata
Al ritorno contiene la lunghezza della struttura piena
A questo punto la connessione è stabilita. Per terminare si utilizza close().