Sample code for 30+ languages & platforms
PureBasic

Async Accept Socket Connection

See more Socket/SSL/TLS Examples

Demonstrates how to get the connected client socket after accepting a connection asynchronously.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkSocket.pb"
IncludeFile "CkTask.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat Socket API to have been previously unlocked.
    ; See Socket Unlock Sample for sample code.

    listenSocket.i = CkSocket::ckCreate()
    If listenSocket.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Bind to a port and listen.
    ; This example will listen at port 5555 and allows for a backlog
    ; of 25 pending connection requests.
    success = CkSocket::ckBindAndListen(listenSocket,5555,25)
    If success <> 1
        Debug CkSocket::ckLastErrorText(listenSocket)
        CkSocket::ckDispose(listenSocket)
        ProcedureReturn
    EndIf

    ; Start a background task to accept an incoming connection ...
    maxWaitMs.i = 20000
    acceptTask.i = CkSocket::ckAcceptNextConnectionAsync(listenSocket,maxWaitMs)
    CkTask::ckRun(acceptTask)

    ; ...
    ; ...
    ; ...

    ; Imagine at this point the task has completed successfully,
    ; and a connection was accepted.  Here's how to get the connected socket...
    connectedClient.i = CkSocket::ckCreate()
    If connectedClient.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkSocket::ckLoadTaskResult(connectedClient,acceptTask)

    ; Here's how it works:  The AcceptNextConnection method would normally
    ; return a socket object when called synchronously.  When called asynchronously,
    ; it cannot do so because it returns the task object.  When the async method
    ; (running in a background thread) completes, the socket object that is the client
    ; connection is contained within the task object.
    ; 
    ; This can be generalized for any case where a Chilkat method returns an object.
    ; The async version of that method is such that the object returned in the background
    ; thread is contained within the task object.

    ; To get the result object, we create a new object instance of that type.
    ; In this case, we create a socket object (connectedClient).  There is a LoadTaskResult
    ; method in all Chilkat classes that can be a return value of an async method call.
    ; The LoadTaskResult method transfers the returned object from the task to the caller.


    CkSocket::ckDispose(listenSocket)
    CkSocket::ckDispose(connectedClient)


    ProcedureReturn
EndProcedure