<div dir="auto"><div>Do not use your own taskPool, just use global taskPool proerty (import std.parallelism: taskPool). </div><div dir="auto"><br></div><div dir="auto">You should not set blocking to false. And dont use Thread here. There is no reason to do that. Just move that code into the main<br><div class="gmail_extra" dir="auto"><br><div class="gmail_quote">Dne 15. 11. 2017 12:15 odp. napsal uživatel "ade90036 via Digitalmars-d-learn" <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>>:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">So thanks for the suggestions, i have fixed HTTP response not postman cal also parse the headers correctly!! happy days.<br>
<br>
I have removed the duration from the Socket.select but the application seems to process a bunch or requests and then it stalls for several seconds (3/5) and then it resumes.<br>
<br>
The httpclinet which i'm using to test the application is reporting: "connection timeout".<br>
<br>
Could this be caused by the GC?<br>
<br>
```updated code<div class="quoted-text"><br>
import std.algorithm : remove;<br>
import std.conv : to;<br>
import core.thread: Thread;<br>
import std.socket : InternetAddress, Socket, SocketException, SocketSet, TcpSocket, SocketShutdown;<br>
import core.time : Duration, dur;<br>
import std.stdio : writeln, writefln;<br>
import std.parallelism : task, TaskPool;<br>
<br></div><div class="quoted-text">
string to_retlf (string s)<br>
{<br>
import std.algorithm;<br>
import std.string;<br>
return s<br>
.lineSplitter<br>
.map!(a => chomp (a))<br>
.join ("\r\n");<br>
}<br>
<br></div><div class="quoted-text">
void main(string[] args)<br>
{<br>
ushort port;<br>
<br>
if (args.length >= 2)<br>
port = to!ushort(args[1]);<br>
else<br></div>
port = 4444;<div class="quoted-text"><br>
<br>
auto listener = new TcpSocket();<br>
assert(listener.isAlive);<br>
listener.blocking = false;<br>
listener.bind(new InternetAddress(port));<br>
listener.listen(100);<br>
writefln("Listening on port %d.", port);<br>
<br>
auto taskPool = new TaskPool(8);<br>
<br></div>
string response = "HTTP/1.1 200 OK<div class="quoted-text"><br>
Server: dland:v2.076.1<br>
Date: Tue, 11 Nov 2017 15:56:02 GMT<br></div>
Content-Type: text/html; charset=UTF-8<br>
Content-Length: 51<br>
<br>
<html><head></head><body>Hello World!</body></html>".to_retlf<wbr>;<div class="quoted-text"><br>
<br>
new Thread({<br>
auto listeningSet = new SocketSet();<br></div>
while(true) {<br>
listeningSet.add(listener);<br>
if (Socket.select(listeningSet, null, null)) {<div class="quoted-text"><br>
if (listeningSet.isSet(listener))<wbr> // connection request<br>
{<br></div>
Socket socket = listener.accept();<br>
assert(socket.isAlive);<div class="quoted-text"><br>
//writefln("Connection from %s established.", socket.remoteAddress().toStrin<wbr>g());<br></div>
auto task = task!handle_socket(socket, response);<br>
taskPool.put(task);<br>
}<br>
}<br>
listeningSet.reset();<br>
}<br>
}).start();<br>
}<br>
<br>
<br>
<br>
void handle_socket(Socket socket, string response) {<div class="quoted-text"><br>
auto socketSet = new SocketSet();<br>
while(true) {<br>
socketSet.add(socket);<br></div>
if (Socket.select(socketSet, null, null)) {<div class="quoted-text"><br>
char[1024] buf;<br>
auto datLength = socket.receive(buf[]);<br>
<br>
if (datLength == Socket.ERROR)<br>
writeln("Connection error.");<br>
else if (datLength != 0)<br>
{<br>
//writefln("Received %d bytes from %s: \"%s\"", datLength, socket.remoteAddress().toStrin<wbr>g(), buf[0..datLength]);<br>
//writefln("Writing response");<br></div>
socket.send(response);<div class="quoted-text"><br>
}<br>
// release socket resources now<br>
<br></div>
socket.close();<br>
<br>
break;<br>
<br>
}<br>
socketSet.reset();<br>
}<br>
```<br>
<br>
Regards<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div><br></div></div></div>