GithubHelp home page GithubHelp logo

webserv's Introduction

Funciones principales

execve: Ejecuta un programa con argumentos dados.

char *args[] = {"ls", "-la", NULL};
execve("/bin/ls", args, NULL);

dup: Duplica un descriptor de archivo.

int fd1 = open("file.txt", O_RDONLY);
int fd2 = dup(fd1);

dup2: Duplica un descriptor de archivo en otro número de archivo.

int fd1 = open("file.txt", O_RDONLY);
int fd2 = open("copy.txt", O_WRONLY | O_CREAT);
dup2(fd1, fd2);

pipe: Crea un par de descriptores de archivo para la comunicación de procesos.

int fd[2];
pipe(fd);

strerror: Devuelve una cadena que describe el error especificado por el número de error.

int errnum = ENOENT;
printf("Error: %s\n", strerror(errnum));

gai_strerror: Devuelve una cadena que describe el error especificado por el código de error de getaddrinfo.

int errcode = EAI_NONAME;
printf("Error: %s\n", gai_strerror(errcode));

errno: Variable global que contiene el número de error de la última llamada al sistema que falló.

int fd = open("nonexistent.txt", O_RDONLY);
if (fd == -1) {
    printf("Error: %s\n", strerror(errno));
}

fork: Crea un nuevo proceso clonando el proceso padre.

pid_t pid = fork();
if (pid == 0) {
    printf("Este es el proceso hijo\n");
} else {
    printf("Este es el proceso padre\n");
}

htons: Convierte un número de 16 bits al orden de bytes de la red.

uint16_t host_num = 0x1234;
uint16_t net_num = htons(host_num);

htonl: Convierte un número de 32 bits al orden de bytes de la red.

uint32_t host_num = 0x12345678;
uint32_t net_num = htonl(host_num);

ntohs: Convierte un número de 16 bits del orden de bytes de la red al orden de bytes del host.

uint16_t net_num = 0x3412;
uint16_t host_num = ntohs(net_num);

ntohl: Convierte un número de 32 bits del orden de bytes de la red al orden de bytes del host.

uint32_t net_num = 0x78563412;
uint32_t host_num = ntohl(net_num);

select: Espera hasta que uno o más descriptores de archivo estén listos para lectura, escritura o excepción.

fd_set read_fds;
FD_ZERO(&read_fds);
FD_SET(fd, &read_fds);
select(fd + 1, &read_fds, NULL, NULL, NULL);

poll: Espera hasta que uno o más descriptores de archivo estén listos para lectura, escritura o excepción.

struct pollfd fds[1];
fds[0].fd = fd;
fds[0].events = POLLIN;
poll(fds, 1, -1);

epoll_create: Crea una instancia de epoll.

int epfd = epoll_create(1);

epoll_ctl: Controla la operación de un descriptor de archivo en una instancia de epoll.

struct epoll_event event;
event.data.fd = fd;
event.events = EPOLLIN | EPOLLET;
epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event);

epoll_wait: Espera hasta que uno o más descriptores de archivo estén listos para lectura, escritura o excepción en una instancia de epoll.

struct epoll_event events[10];
int n = epoll_wait(epfd, events, 10, -1);
for (int i = 0; i < n; i++) {
    // procesar el evento
}

kqueue: Crea una instancia de kqueue.

int kq = kqueue();

kevent: Controla la operación de un descriptor de archivo en una instancia de kqueue.

struct kevent event;
EV_SET(&event, fd, EVFILT_READ, EV_ADD, 0, 0, NULL);
kevent(kq, &event, 1, NULL, 0, NULL);

socket: Crea un socket.

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

accept: Acepta una conexión entrante en un socket.

struct sockaddr_in client_addr;
socklen_t client_len = sizeof(client_addr);
int clientfd = accept(sockfd, (struct sockaddr *)&client_addr, &client_len);

listen: Escucha las conexiones entrantes en un socket.

int backlog = 10;
listen(sockfd, backlog);

send: Envía datos a través de un socket.

char *msg = "Hola, mundo!";
int len = strlen(msg);
int n = send(sockfd, msg, len, 0);

recv: Recibe datos a través de un socket.

char buffer[1024];
int n = recv(sockfd, buffer, sizeof(buffer), 0);

bind: Asocia un socket con una dirección.

struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = INADDR_ANY;
bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));

connect: Establece una conexión con un socket.

struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
inet_pton(AF_INET, ip_addr, &server_addr.sin_addr);
connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));

getaddrinfo: Obtiene información de direcciones para un nombre de host y un servicio.

struct addrinfo hints, *result;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
int rc = getaddrinfo("www.example.com", "http", &hints, &result);

freeaddrinfo: Libera la memoria reservada por getaddrinfo.

freeaddrinfo(result);

setsockopt: Configura las opciones de un socket.

int optval = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));

getsockname: Obtiene la dirección local asociada con un socket.

struct sockaddr_in local_addr;
socklen_t addr_len = sizeof(local_addr);
getsockname(sockfd, (struct sockaddr *)&local_addr, &addr_len);

getprotobyname: Obtiene una estructura protoent para un protocolo dado su nombre.

struct protoent *proto = getprotobyname("tcp");

fcntl: Obtiene o establece las propiedades del descriptor de archivo, como modo de bloqueo y banderas de acceso.

int flags = fcntl(sockfd, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(sockfd, F_SETFL, flags);

webserv's People

Contributors

andonimarz avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.