TCP Socket (af_inet)(IPv4/IPv6)(with ssl) – c language

This program is an example of programming a TCP socket in C language, using the well-known client-server programming model.
The server side is multi-threaded, but the thread is optional since the developer/designer is still responsible for deciding if he/she needs it.

The library “commv6.c” develops all the functions to create, bind, listen, and remove a socket AF_INET, and the functions to send and receive messages (using the methods read and write). It supports: IPv4/IPv6 and SSL (see commSSL.c).
The structure of a message is defined in the file “msg.h”.

Code tested under debian-like and arch linux platform (thanks to nignux).


Questo programma è un esempio di programmazione di un socket TCP in linguaggio C, utilizzando il ben noto paradigma di programmazione client-server.
Il lato server è multi-threaded, ma è del tutto opzionale, e sarà responsabilità dello sviluppatore decidere se ne ha bisogno.

La libreria “commv6.c” sviluppa tutte le funzioni per creare, pubblicare, rimanere in ascolto e rimuovere una  socket af_inet, e le funzioni per inviare e ricevere messaggi (usando i metodi read e write). Il codice supporta socket ipv4/ipv6 e SSL (commSSL.c)
La struttura di un messaggio è definita nel file “msg.h”.

Codice testato sotto piattaforma debian-like e arch linux (ringraziamenti a nignux).


Be careful when you do a read(/write) on a socket: the machine at the other end of the socket is of your own platform (x86/x64)?
Fate attenzione quando fate una read(/write) su una socket: la macchina dall’altro capo della socket è della vostra stessa piattaforma (x86/x64)?
x86 x64
sizeof(char)  1  1
sizeof(short)  2  2
sizeof(float)  4  4
sizeof(int)  4  4
sizeof(unsigned int)  4  4
sizeof(long)  4  8
sizeof(double)  8  8
sizeof(long unsigned int)  4  8
sizeof(long double) 12 16
sizeof(long int)  4  8

x64

Linux 3.0.0-16-generic #28-Ubuntu SMP Fri Jan 27 17:44:39 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

x32

Linux 2.6.18-6-k7 #1 SMP Thu Aug 20 22:36:26 UTC 2009 i686 GNU/Linux

Si consiglia di utilizzare:

sys/types.h

dove vengono dichiarati i tipi:

int8_t
u_int8_t
int16_t
u_int16_t
int32_t
u_int32_t
int64_t
u_int64_t