API des sockets BSD en C++
Utiliser socket, bind, listen, accept, connect, send et recv dans des programmes C++
API des sockets BSD en C++ est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que l'API des sockets ?
L'API des sockets BSD est la norme de fait pour la programmation réseau. Elle est disponible sous Linux, macOS, dans les systèmes BSD et, avec quelques adaptations mineures, sous Windows via Winsock.
En-têtes requis
Incluez les en-têtes de la plateforme et utilisez les types POSIX.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>Création d'un socket
L'appel socket renvoie un descripteur de fichier. Transmettez la famille (IPv4), le type (TCP ou UDP) et le protocole (0 pour la valeur par défaut).
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket");
return 1;
}Structures d'adresses
struct sockaddr_in contient une adresse IPv4 et un port. Effectuez une conversion vers struct sockaddr* lors du passage aux fonctions.
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);Ordre des octets : hôte contre réseau
L'ordre des octets réseau est en gros-boutiste. Utilisez htons, htonl, ntohs et ntohl pour effectuer la conversion.
Connexion d'un client
Utilisez connect pour établir une connexion TCP.
if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect");
close(sock);
return 1;
}Envoi et réception
send et recv échangent des octets. Les deux peuvent transférer moins d'octets que demandé : bouclez toujours.
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';Liaison et écoute (serveur)
Un serveur se lie à une adresse, écoute, puis accepte les connexions.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);Fermeture du socket
Appelez close sous Unix ou closesocket sous Windows.
close(sock);Gestion des erreurs
Les fonctions des sockets renvoient -1 en cas d'erreur et définissent errno. Vérifiez chaque valeur de retour.
Encapsulation avec RAII
Les descripteurs de fichiers bruts sont faciles à laisser fuir. Encapsulez-les dans un type RAII dont le destructeur appelle close — ou utilisez std::unique_ptr avec un suppresseur personnalisé.
struct SocketCloser {
void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;Différences sous Windows
Sous Windows :
- Incluez
<winsock2.h>et liezws2_32 - Appelez
WSAStartupavant toute utilisation - Utilisez
closesocketà la place declose - Le type de socket est
SOCKET(non signé)
Vérification rapide
Quel appel de fonction établit une connexion TCP d'un client vers un serveur ?
Récapitulatif
L'API des sockets BSD fournit des primitives réseau de bas niveau. Créez un socket, configurez une adresse, puis connectez-vous côté client ou liez, écoutez et acceptez côté serveur. Convertissez l'ordre des octets avec la famille de fonctions htons. Encapsulez les descripteurs avec RAII pour éviter les fuites.
Questions Fréquemment Posées
La leçon « API des sockets BSD en C++ » est-elle gratuite ?
Oui — le texte complet de « API des sockets BSD en C++ » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « API des sockets BSD en C++ » ?
Utiliser socket, bind, listen, accept, connect, send et recv dans des programmes C++ Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « API des sockets BSD en C++ » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- API des sockets BSD en C++
- Construire un serveur d’écho TCP
- IO asynchrones avec epoll et kqueue
- Utiliser Boost Asio pour des IO asynchrones modernes