API dei socket BSD in C++
Usi socket, bind, listen, accept, connect, send e recv nei programmi C++
API dei socket BSD in C++ è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Che cos'è l'API dei socket?
L'API dei socket BSD è lo standard de facto per la programmazione di rete. È disponibile su Linux, macOS e BSD e, con lievi modifiche, su Windows tramite Winsock.
Header necessari
Includa gli header della piattaforma e usi i tipi POSIX.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>Creazione di un socket
La chiamata socket restituisce un descrittore di file. Passi la famiglia (IPv4), il tipo (TCP o UDP) e il protocollo (0 per usare quello predefinito).
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket");
return 1;
}Strutture degli indirizzi
struct sockaddr_in contiene un indirizzo IPv4 e una porta. Esegua il cast a struct sockaddr* quando lo passa alle funzioni.
struct sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);Ordine dei byte: host e rete
L'ordine dei byte di rete è big-endian. Usi htons, htonl, ntohs e ntohl per la conversione.
Connessione di un client
Usi connect per avviare una connessione TCP.
if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect");
close(sock);
return 1;
}Invio e ricezione
send e recv scambiano byte. Entrambe possono restituire meno byte di quelli richiesti: esegua sempre un ciclo.
const char* msg = "Hello";
send(sock, msg, strlen(msg), 0);
char buffer[1024];
ssize_t n = recv(sock, buffer, sizeof(buffer)-1, 0);
buffer[n] = '\0';Binding e ascolto (server)
Un server esegue il binding a un indirizzo, resta in ascolto e accetta le connessioni.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);Chiusura del socket
Chiami close su Unix o closesocket su Windows.
close(sock);Gestione degli errori
Le funzioni dei socket restituiscono -1 in caso di errore e impostano errno. Controlli ogni valore restituito.
Involucro RAII
I descrittori di file non incapsulati possono essere facilmente persi. Li incapsuli in un tipo RAII con una chiamata a close nel distruttore, oppure usi std::unique_ptr con un deleter personalizzato.
struct SocketCloser {
void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;Differenze su Windows
Su Windows:
- Includa
<winsock2.h>e colleghiws2_32 - Chiami
WSAStartupprima dell'uso - Usi
closesocketinvece diclose - Il tipo del socket è
SOCKET(senza segno)
Verifica rapida
Quale chiamata di funzione avvia una connessione TCP da un client a un server?
Riepilogo
L'API dei socket BSD offre primitive di rete a basso livello. Crei un socket, configuri un indirizzo, quindi esegua connect (client) oppure bind+listen+accept (server). Converta l'ordine dei byte usando la famiglia htons. Incapsuli i descrittori in RAII per evitare perdite di risorse.
Domande Frequenti
La lezione «API dei socket BSD in C++» è gratuita?
Sì — il testo completo di «API dei socket BSD in C++» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «API dei socket BSD in C++»?
Usi socket, bind, listen, accept, connect, send e recv nei programmi C++ Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «API dei socket BSD in C++»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- API dei socket BSD in C++
- Costruire un server echo TCP
- I/O asincrono con epoll e kqueue
- Usare Boost Asio per l'I/O asincrono moderno