// socket_example.wren (Corrected) import "socket" for Socket System.print("--- Wren Socket Echo Server and Client ---") var serverFiber = Fiber.new { var server = Socket.new() if (server.listen("localhost", 8080, 5)) { System.print("Server listening on localhost:8080") while (server.isOpen) { server.accept { |err, client| if (err) { System.print("Accept error: %(err)") return } System.print("Client connected!") Fiber.new { while (client.isOpen) { client.read(4096) { |readErr, data| if (readErr) { System.print("Client disconnected.") client.close() return } System.print("Received: %(data)") // CORRECTED: Replaced '_' with 'result' client.write("Echo: %(data)") { |writeErr, result| if (writeErr) System.print("Write error: %(writeErr)") } } } }.call() } } } else { System.print("Failed to start server.") } } var clientFiber = Fiber.new { var client = Socket.new() // CORRECTED: Replaced '_' with 'result' client.connect("localhost", 8080) { |err, result| if (err) { System.print("Client connection error: %(err)") return } System.print("Client connected to server.") // CORRECTED: Replaced '_' with 'result' client.write("Hello from Wren!") { |writeErr, result| if (writeErr) { System.print("Client write error: %(writeErr)") return } client.read(1024) { |readErr, data| if (readErr) { System.print("Client read error: %(readErr)") } else { System.print("Client received: %(data)") } client.close() } } } } // Start the server serverFiber.call() // Give the server a moment to start up before connecting the client Fiber.sleep(100) // Start the client clientFiber.call() // Let the operations complete Fiber.sleep(1000)