www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Windows Socket Timeout

reply "Evan Davis" <cptroot gmail.com> writes:
Hi, I'm trying to write a game sever/client architecture in D, 
but I keep running into problems with the timeouts for windows 
sockets.

On the std.socket documentation page it states that you can't set 
a timeout smaller than 500ms, and I've been experiencing this 
problem first hand. The problem is that I am trying to interlace 
sending packets with receiving packets, and I can't do that at 60 
FPS without having a low timeout.

Two questions: First, can you use select() on UDP sockets?

Second, would it be feasible to have two different sockets 
instead, and use the REUSEADDR option? I'm somewhat worried about 
client-side cheating.

Thanks for any thoughts,
  Evan Davis
Mar 22 2012
parent reply Paulo Pinto <pjmlp progtools.org> writes:
Am 22.03.2012 22:09, schrieb Evan Davis:
 Hi, I'm trying to write a game sever/client architecture in D, but I
 keep running into problems with the timeouts for windows sockets.

 On the std.socket documentation page it states that you can't set a
 timeout smaller than 500ms, and I've been experiencing this problem
 first hand. The problem is that I am trying to interlace sending packets
 with receiving packets, and I can't do that at 60 FPS without having a
 low timeout.

 Two questions: First, can you use select() on UDP sockets?

 Second, would it be feasible to have two different sockets instead, and
 use the REUSEADDR option? I'm somewhat worried about client-side cheating.

 Thanks for any thoughts,
 Evan Davis
If you really want performant sockets on Windows, you need to make use of the Windows specific APIs, and use IO completion ports not select. -- Paulo
Mar 22 2012
parent reply "David Nadlinger" <see klickverbot.at> writes:
On Thursday, 22 March 2012 at 23:36:03 UTC, Paulo Pinto wrote:
 If you really want performant sockets on Windows, you need to 
 make use
 of the Windows specific APIs, and use IO completion ports not 
 select.
Depending on what you are trying to achieve, you could always consider using enet or (parts of) RakNet. David
Mar 22 2012
parent James Miller <james aatch.net> writes:
On 23 March 2012 12:52, David Nadlinger <see klickverbot.at> wrote:
 On Thursday, 22 March 2012 at 23:36:03 UTC, Paulo Pinto wrote:
 If you really want performant sockets on Windows, you need to make use
 of the Windows specific APIs, and use IO completion ports not select.
Depending on what you are trying to achieve, you could always consider using enet or (parts of) RakNet. David
Ideally, no matter what platform you're on, you want some form of non-blocking or asynchronous networking. The easiest way would be a seperate thread for all networking logic. Especially since you should probably have a separate thread for your rendering code anyway. -- James Miller
Mar 22 2012