how would I go about creating a Socket receiveAll method?

Unazed Spectaculum unazed at spec.org
Tue Dec 12 20:10:55 UTC 2017


string receiveAll(T)(T socket, int segment_size = 1024)
{
	char[segment_size][] data;
	int cnt = 0;

	while(true)
	{
		auto received = socket.receive(data[cnt]);
		if (received < segment_size)
			break;  /* early exit */
		else if (!received)
			break;
                 ++cnt;
	}

	return data;
}


This is my theoretical function, it errors at 
`char[segment_size][] data;` with the painful `app.d(20): Error: 
variable segment_size cannot be read at compile time` and I 
recall having an issue similar to this earlier (yesterday) but I 
don't think any of my solutions seemed valid for this situation.

I understand it's to do with CTFE or some form of compile-time 
checking but that's really the only thing that annoys me about D, 
perhaps somebody could link to some resource that explains (not 
shortly) how to make the D compiler evaluate some things at 
run-time opposed to compile time.

Perhaps somebody can link some resources e.g. socket servers in D 
so I can learn how it's implemented by somebody with a bit more 
experience, or some resources on how to use sockets properly 
¯\_(ツ)_/¯


More information about the Digitalmars-d-learn mailing list