Un cliente TCP en C
socket, connect, write, read, close — el cliente completo en cinco llamadas.
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
int fetch(const char *ip, int port) {
int fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0) {
return 0;
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof addr);
addr.sin_family = AF_INET;
addr.sin_port = htons((unsigned short) port);
inet_pton(AF_INET, ip, &addr.sin_addr);
if (connect(fd, (struct sockaddr *) &addr, sizeof addr) != 0) {
close(fd);
return 0;
}
const char *request = "GET /healthz HTTP/1.0\r\n\r\n";
write(fd, request, strlen(request));
char buffer[256];
ssize_t n = read(fd, buffer, sizeof buffer - 1);
if (n > 0) {
buffer[n] = '\0';
printf("%s", buffer);
}
close(fd);
return n > 0;
}
Cómo funciona
AF_INETconSOCK_STREAMsignifica TCP sobre IPv4.- El puerto debe convertirse con
htons. - Cada descriptor se cierra a la salida.
Palabras clave y builtins usados aquí
charconstifintreturnshortsizeofssize_tstructunsigned
El intento, en números
- Líneas
- 35
- Caracteres a escribir
- 713
- Tokens
- 210
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 115 segundos.
Paso 1 de 1 en Sockets; paso 13 de 14 en Programación de sistemas.