API de sockets BSD em C++
Use socket, bind, listen, accept, connect, send e recv em programas C++
API de sockets BSD em C++ é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
O que é a API de soquetes?
A API de soquetes BSD é o padrão de fato para programação de redes. Está disponível no Linux, no macOS, nos sistemas BSD e, com pequenos ajustes, no Windows por meio do Winsock.
Cabeçalhos necessários
Inclua os cabeçalhos da plataforma e use os tipos POSIX.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>Criando um soquete
A chamada socket retorna um descritor de arquivo. Passe a família (IPv4), o tipo (TCP ou UDP) e o protocolo (0 para o padrão).
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket");
return 1;
}Estruturas de endereços
struct sockaddr_in contém um endereço IPv4 e uma porta. Faça a conversão para struct sockaddr* ao passar o endereço para as funções.
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);Ordem dos bytes: máquina vs. rede
A ordem de bytes da rede é do tipo mais significativo primeiro. Use htons, htonl, ntohs e ntohl para converter.
Conectando um cliente
Use connect para iniciar uma conexão TCP.
if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect");
close(sock);
return 1;
}Enviando e recebendo
send e recv trocam bytes. Ambas podem retornar menos bytes do que o solicitado — sempre repita em um laço.
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';Associando e escutando (servidor)
Um servidor associa-se a um endereço, escuta e aceita conexões.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);Fechando o soquete
Chame close no Unix ou closesocket no Windows.
close(sock);Tratamento de erros
As funções de soquete retornam -1 em caso de erro e definem errno. Verifique todos os valores retornados.
Encapsulando com RAII
Descritores de arquivo crus vazam facilmente. Encapsule-os em um tipo RAII com uma chamada close no destrutor — ou use std::unique_ptr com um destrutor personalizado.
struct SocketCloser {
void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;Diferenças no Windows
No Windows:
- Inclua
<winsock2.h>e faça a ligação comws2_32 - Chame
WSAStartupantes de usar a API - Use
closesocketem vez declose - O tipo de soquete é
SOCKET(sem sinal)
Verificação rápida
Qual chamada de função inicia uma conexão TCP de um cliente com um servidor?
Recapitulação
A API de soquetes BSD oferece primitivas de baixo nível para redes. Crie um soquete, configure um endereço e então conecte-se (cliente) ou use bind+listen+accept (servidor). Converta a ordem dos bytes com a família de funções htons. Encapsule os descritores em RAII para evitar vazamentos.
Perguntas Frequentes
A aula “API de sockets BSD em C++” é grátis?
Sim — o texto completo de “API de sockets BSD em C++” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “API de sockets BSD em C++”?
Use socket, bind, listen, accept, connect, send e recv em programas C++ Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “API de sockets BSD em C++”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- API de sockets BSD em C++
- Construir um servidor de eco TCP
- IO assíncrono com epoll e kqueue
- Usar Boost Asio para IO assíncrono moderno