Sample code for 30+ languages & platforms
Tcl

Receive an Exact Number of Bytes into a BinData

See more Socket/SSL/TLS Examples

Demonstrates Socket.ReceiveBdN, which receives exactly the requested number of bytes and appends them to a BinData, continuing until the full count is satisfied.

Background. Inactivity is controlled by MaxReadIdleMs: the call fails if incoming bytes halt for longer than MaxReadIdleMs milliseconds before the full amount is received. A single receive returns only what is currently available, whereas this counted receive waits for an exact number of bytes.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

set socket [new_CkSocket]

#  Connect to the server using TLS.
set bTls 1
set maxWaitMs 5000
set success [CkSocket_Connect $socket "example.com" 5000 $bTls $maxWaitMs]
if {$success == 0} then {
    puts [CkSocket_lastErrorText $socket]
    delete_CkSocket $socket
    exit
}

#  MaxReadIdleMs controls the inactivity limit for receiving.  The ReceiveBdN call will fail if
#  incoming bytes halt for longer than this many milliseconds before the full amount is received.
CkSocket_put_MaxReadIdleMs $socket 15000

#  Receive exactly the requested number of bytes, appending them to a BinData.  The method continues
#  receiving until the full count is satisfied or a failure occurs.
set bd [new_CkBinData]

set success [CkSocket_ReceiveBdN $socket 256 $bd]
if {$success == 0} then {
    puts [CkSocket_lastErrorText $socket]
    delete_CkSocket $socket
    delete_CkBinData $bd
    exit
}

puts "Received [CkBinData_get_NumBytes $bd] bytes."

delete_CkSocket $socket
delete_CkBinData $bd