// socket_example.wren import "socket" for Socket, SocketInstance foreign class Host { foreign static signalDone() } class Time { static sleep(ms) { var start = System.clock while ((System.clock - start) * 1000 < ms) { Fiber.yield() } } } var mainFiber = Fiber.new { System.print("=== Simple Socket Test ===") // Test 1: Create a server socket System.print("\n1. Creating server socket...") var serverResult = SocketInstance.new() if (!serverResult) { System.print("Failed to create server socket") Host.signalDone() return } var serverErr = serverResult[0] var serverSock = serverResult[1] if (serverErr) { System.print("Server socket error: %(serverErr)") Host.signalDone() return } System.print("Server socket created successfully") // Test 2: Bind the server socket System.print("\n2. Binding server socket to port 11000...") var bindResult = serverSock.bind("127.0.0.1", 11000) var bindErr = bindResult[0] var bindSuccess = bindResult[1] if (bindErr) { System.print("Bind error: %(bindErr)") serverSock.close() Host.signalDone() return } System.print("Server socket bound successfully") // Test 3: Listen on the server socket System.print("\n3. Starting to listen...") var listenResult = serverSock.listen(5) var listenErr = listenResult[0] var listenSuccess = listenResult[1] if (listenErr) { System.print("Listen error: %(listenErr)") serverSock.close() Host.signalDone() return } System.print("Server listening successfully") // Test 4: Create and connect a client socket System.print("\n4. Creating client socket and connecting...") var clientResult = SocketInstance.connect("127.0.0.1", 11000) if (!clientResult) { System.print("Failed to create client socket") serverSock.close() Host.signalDone() return } var clientErr = clientResult[0] var clientSock = clientResult[1] if (clientErr) { System.print("Client connection error: %(clientErr)") serverSock.close() Host.signalDone() return } System.print("Client connected successfully") // Test 5: Accept connection on server System.print("\n5. Accepting connection on server...") var acceptAttempts = 0 var accepted = false var acceptedSock = null while (acceptAttempts < 100 && !accepted) { var acceptResult = serverSock.accept() var acceptErr = acceptResult[0] var acceptedFd = acceptResult[1] if (!acceptErr && acceptedFd) { acceptedSock = SocketInstance.fromFd(acceptedFd) accepted = true System.print("Connection accepted successfully") } else { acceptAttempts = acceptAttempts + 1 Fiber.yield() } } if (!accepted) { System.print("Failed to accept connection after %(acceptAttempts) attempts") clientSock.close() serverSock.close() Host.signalDone() return } // Test 6: Send data from client to server System.print("\n6. Sending data from client to server...") var testMessage = "Hello from client!" var writeErr = clientSock.write(testMessage) if (writeErr) { System.print("Client write error: %(writeErr)") } else { System.print("Client sent: %(testMessage)") } // Test 7: Read data on server side System.print("\n7. Reading data on server side...") var readAttempts = 0 var dataReceived = false while (readAttempts < 100 && !dataReceived) { var readResult = acceptedSock.read(1024) var readErr = readResult[0] var readData = readResult[1] if (!readErr && readData && readData.count > 0) { System.print("Server received: %(readData)") dataReceived = true // Echo back var echoErr = acceptedSock.write(readData) if (echoErr) { System.print("Server echo error: %(echoErr)") } else { System.print("Server echoed data back") } } else { readAttempts = readAttempts + 1 Fiber.yield() } } if (!dataReceived) { System.print("No data received after %(readAttempts) attempts") } // Test 8: Read echo on client side System.print("\n8. Reading echo on client side...") readAttempts = 0 var echoReceived = false while (readAttempts < 100 && !echoReceived) { var readResult = clientSock.read(1024) var readErr = readResult[0] var readData = readResult[1] if (!readErr && readData && readData.count > 0) { System.print("Client received echo: %(readData)") echoReceived = true } else { readAttempts = readAttempts + 1 Fiber.yield() } } // Clean up System.print("\n9. Cleaning up...") acceptedSock.close() clientSock.close() serverSock.close() System.print("\n=== All tests completed successfully! ===") Host.signalDone() }