Made the requested changes but not seeing a return back to the main loop. Also put an echo after calling the serve() function, - echo "Returning to the main loop.". Not seeing that echo either.
The loop comes to an end but still not able to get back to the main program loop. Updated Client- import os import net import strutils import asyncnet, asyncdispatch, parseutils proc processClient*(client: AsyncSocket, fileName: string) {.async.} = var fileSize: int counter: int while not client.isClosed: echo "Wait file" var file = open(fileName, fmWrite ) let sizeFileString = await client.recvLine() discard sizeFileString.parseInt(fileSize) echo "File Size is " & $fileSize counter = 0 var dataFut = client.recv(4000) while true: yield dataFut echo "Counter : " & $counter if counter >= fileSize: break else: if dataFut.finished: let data = dataFut.read if data != "": counter += data.len file.write(data) dataFut = client.recv(4000) else: echo "No data" break else: echo "Exit" break echo "End of file" file.close break client.close() proc serve*(fileName: string) {.async.} = var server = newAsyncSocket(buffered=false) server.setSockOpt(OptReuseAddr, true) server.bindAddr(Port(5555)) server.listen() echo "Server running!" while true: let client = await server.accept() echo "New client connected" asyncCheck processClient(client, fileName) var server: Socket = newSocket() server.bindAddr(Port(443)) server.listen() stdout.writeLine("The Sever is now Listening for incoming connections ... ") var client: Socket = new(Socket) server.accept(client) stdout.writeLine("The connection has been established.") echo "\n" proc mainLoop() {.async.} = while true: stdout.write("Enter a command > ") let input: string = stdin.readLine() echo "\n" if input.startsWith("cmd ") or input.startsWith("exit ") or input.startsWith("getsize ") or input.startsWith("path ") or input.startsWith("screenshot") or input.startsWith("download "): client.send(input & "\r\n") if input.startsWith("download "): var get_name = input[0..^1] let (dirPath, fileName) = splitPath(get_name) echo "THIS IS WHAT IS BEING PASSED TO THE FUNCTION: ", fileName waitFor serve(fileName) echo "Returning back to the main loop." else: stdout.writeLine("Command not allowed") continue let message: string = client.recvLine() if ":" in message: for x in message.split(";"): stdout.writeLine(x) echo "\n" else: stdout.writeLine(message) echo "\n" #client.close() waitFor mainLoop() Run The Server code has not been changed. Here is the current output of both the client and server - Client Output - C:\Users\nater\Desktop\nim>client The Sever is now Listening for incoming connections ... The connection has been established. Enter a command > download c:\users\nater\desktop\spring.jpg THIS IS WHAT IS BEING PASSED TO THE FUNCTION: spring.jpg Client running! New client connected Wait file File Size is 894902 Counter : 0 Counter : 4000 Counter : 8000 Counter : 12000 Counter : 16000 Counter : 20000 Counter : 24000 Counter : 28000 Counter : 32000 Counter : 36000 Counter : 40000 Counter : 44000 Counter : 48000 Counter : 52000 Counter : 56000 Counter : 60000 Counter : 64000 Counter : 68000 Counter : 72000 Counter : 76000 Counter : 80000 Counter : 84000 Counter : 88000 Counter : 92000 Counter : 96000 Counter : 100000 Counter : 104000 Counter : 108000 Counter : 112000 Counter : 116000 Counter : 120000 Counter : 124000 Counter : 128000 Counter : 132000 Counter : 136000 Counter : 140000 Counter : 144000 Counter : 148000 Counter : 152000 Counter : 156000 Counter : 160000 Counter : 164000 Counter : 168000 Counter : 172000 Counter : 176000 Counter : 180000 Counter : 184000 Counter : 188000 Counter : 192000 Counter : 196000 Counter : 200000 Counter : 204000 Counter : 208000 Counter : 212000 Counter : 216000 Counter : 220000 Counter : 224000 Counter : 228000 Counter : 232000 Counter : 236000 Counter : 240000 Counter : 244000 Counter : 248000 Counter : 252000 Counter : 256000 Counter : 260000 Counter : 264000 Counter : 268000 Counter : 272000 Counter : 276000 Counter : 280000 Counter : 284000 Counter : 288000 Counter : 292000 Counter : 296000 Counter : 300000 Counter : 304000 Counter : 308000 Counter : 312000 Counter : 316000 Counter : 320000 Counter : 324000 Counter : 328000 Counter : 332000 Counter : 336000 Counter : 340000 Counter : 344000 Counter : 348000 Counter : 352000 Counter : 356000 Counter : 360000 Counter : 364000 Counter : 368000 Counter : 372000 Counter : 376000 Counter : 380000 Counter : 384000 Counter : 388000 Counter : 392000 Counter : 396000 Counter : 400000 Counter : 404000 Counter : 408000 Counter : 412000 Counter : 416000 Counter : 420000 Counter : 424000 Counter : 428000 Counter : 432000 Counter : 436000 Counter : 440000 Counter : 444000 Counter : 448000 Counter : 452000 Counter : 456000 Counter : 460000 Counter : 464000 Counter : 468000 Counter : 472000 Counter : 476000 Counter : 480000 Counter : 484000 Counter : 488000 Counter : 492000 Counter : 496000 Counter : 500000 Counter : 504000 Counter : 508000 Counter : 512000 Counter : 516000 Counter : 520000 Counter : 524000 Counter : 528000 Counter : 532000 Counter : 536000 Counter : 540000 Counter : 544000 Counter : 548000 Counter : 552000 Counter : 556000 Counter : 560000 Counter : 564000 Counter : 568000 Counter : 572000 Counter : 576000 Counter : 580000 Counter : 584000 Counter : 588000 Counter : 592000 Counter : 596000 Counter : 600000 Counter : 604000 Counter : 608000 Counter : 612000 Counter : 616000 Counter : 620000 Counter : 624000 Counter : 628000 Counter : 632000 Counter : 636000 Counter : 640000 Counter : 644000 Counter : 648000 Counter : 652000 Counter : 656000 Counter : 660000 Counter : 664000 Counter : 668000 Counter : 672000 Counter : 676000 Counter : 680000 Counter : 684000 Counter : 688000 Counter : 692000 Counter : 696000 Counter : 700000 Counter : 704000 Counter : 708000 Counter : 712000 Counter : 716000 Counter : 720000 Counter : 724000 Counter : 728000 Counter : 732000 Counter : 736000 Counter : 740000 Counter : 744000 Counter : 748000 Counter : 752000 Counter : 756000 Counter : 760000 Counter : 764000 Counter : 768000 Counter : 772000 Counter : 776000 Counter : 780000 Counter : 784000 Counter : 788000 Counter : 792000 Counter : 796000 Counter : 800000 Counter : 804000 Counter : 808000 Counter : 812000 Counter : 816000 Counter : 820000 Counter : 824000 Counter : 828000 Counter : 832000 Counter : 836000 Counter : 840000 Counter : 844000 Counter : 848000 Counter : 852000 Counter : 856000 Counter : 860000 Counter : 864000 Counter : 868000 Counter : 872000 Counter : 876000 Counter : 880000 Counter : 884000 Counter : 888000 Counter : 892000 Counter : 894902 End of file Server Output - C:\Users\nater\Desktop\nim>Server Client: connected to server on address 127.0.0.1:5555 This is the file name: c:\users\nater\desktop\spring.jpg File size is :894902 Send file size Pull ... Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 4000 Send data size : 2902 End of file Run Notice the server sends chunks of 4000 to the client and at the end it breaks out of the loop and shows "End of file" The server is nearly the same receiving an iteration of 4000 and when the file chunks have finished, it breaks out of the loop and shows "End of file". However, the echo statement in the client waitFor serve(fileName) echo "Returning back to the main loop." Run never shows the "Returning back to the main loop.". And there is no ability to input text, as the cursor will not take input. Please help to resolve.