48 / Redes

Socket UDP

UDP es un protocolo sin conexión: cada datagrama es independiente, sin handshake ni entrega garantizada. udp_bind crea un socket, udp_sendto envía datos a una dirección, y udp_recvfrom recibe datos. UDP es ideal para aplicaciones en tiempo real donde la baja latencia importa más que la confiabilidad.

48-udp-socket.nxFuente →
// UDP send and receive — connectionless datagrams
// Envío y recepción UDP — datagramas sin conexión

fn main() -> int {
    // Bind a UDP socket to a local port
    let sock: int = udp_bind("127.0.0.1", 9001)
    if sock < 0 {
        print("failed to bind UDP socket")
        return 1
    }
    print("UDP socket bound to :9001")

    // Send a datagram to a remote address
    let msg: String = "hello via UDP"
    udp_sendto(sock, msg, "127.0.0.1", 9001)
    print("sent: " + msg)

    // Receive a datagram (blocks until one arrives)
    let received: String = udp_recvfrom(sock, 1024)
    print("received: " + received)

    tcp_close(sock)
    return 0
}
Salidastdout
UDP socket bound to :9001
sent: hello via UDP
received: hello via UDP

Cómo funciona

udp_bind(host, port) crea un socket UDP vinculado a la dirección dada. A diferencia de TCP, no hay configuración de conexión — puedes enviar inmediatamente a cualquier dirección con udp_sendto(sock, data, host, port). udp_recvfrom(sock, max_bytes) bloquea hasta que llega un datagrama.

En este ejemplo, el socket se envía a sí mismo (loopback). En la práctica, tendrías sockets separados de emisor y receptor en distintos hosts o puertos. Los sockets UDP se cierran con tcp_close (el mismo mecanismo de descriptor de archivo subyacente).