Slide 31 de 37

Rede: TCP bruto

proc handle(conn: hive.net.SocketConnection): void {
	if hive.net.socketReceiveLine(conn) is Result.Ok(line) {
		hive.net.socketSend(conn, "você disse: {line}\n")
	}
	hive.net.socketClose(conn)
}

proc main(): void {
	hive.net.socketServe(9000, handle)
}
TCP bruto é um fluxo, não uma fila de mensagens, então as chamadas de socket de hive.net movem bytes em vez de mensagens inteiras. socketConnect disca para fora e socketServe(port, handler) escuta, chamando um proc(SocketConnection): void uma vez por conexão; socketReceive(conn, bytes) faz uma leitura curta — receber menos bytes do que foi pedido é normal, não um erro — enquanto socketReceiveLine lê até a próxima nova linha e a descarta. socketPeer nomeia quem está do outro lado, e socketClose termina o fluxo. O reason de um SocketError é Connect, Closed, Send ou Receive.