Blitz3D+ Command Reference

TCPTimeouts read_millis,accept_millis

Parameters

read_millis - how long a TCP read may wait for data, in milliseconds (starts out as 10000)

accept_millis - how long AcceptTCPStream waits for a connection, in milliseconds (starts out as 0)

Description

Sets the timeouts used by all TCP streams and servers.

read_millis is the safety net under the read commands: a read that cannot get its data within this time gives up. The default is 10000 (ten seconds). When a read times out the stream is marked as failed - Eof returns -1 and the stream cannot be used again - so a timeout is a death sentence for that connection, not a retry. The way to avoid ever hitting it in a game loop is to check ReadAvail and only read data that has already arrived.

accept_millis controls AcceptTCPStream: with the default 0 it returns immediately when no one is waiting, which suits polling in a main loop. A dedicated server loop can set a small wait instead of spinning.

The settings are global - they apply to every TCP stream, current and future, not per stream.

See also: AcceptTCPStream, OpenTCPStream, ReadAvail, Eof.

Example

; TCPTimeouts Example
; -------------------

; TCPTimeouts controls two waiting times:
;   read_millis   - how long a read may wait for data before
;                   erroring (default 10000 ms)
;   accept_millis - how long AcceptTCPStream waits for a new
;                   connection (default 0 = return immediately)

port=4006

server=CreateTCPServer(port)
If server=0 Then
    Print "Could not listen on port "+port+" (it may be in use)"
Else
    ; With the default accept timeout, Accept returns at once
    TCPTimeouts 10000,0
    start=MilliSecs()
    stream=AcceptTCPStream(server)
    Print "TCPTimeouts 10000,0    : AcceptTCPStream returned "+stream+" after "+(MilliSecs()-start)+" ms"

    ; With a 2 second accept timeout, Accept WAITS for a caller
    ; (nobody connects here, so it gives up after ~2000 ms)
    TCPTimeouts 10000,2000
    Print ""
    Print "Now waiting up to 2 seconds for a connection..."
    start=MilliSecs()
    stream=AcceptTCPStream(server)
    Print "TCPTimeouts 10000,2000 : AcceptTCPStream returned "+stream+" after "+(MilliSecs()-start)+" ms"

    ; Restore the defaults for any code that follows
    TCPTimeouts 10000,0

    CloseTCPServer server
EndIf

Print ""
Print "Press any key to close the example"
WaitKey

End

Index