sdlNetWaitUntilStreamSocketDrained function

int sdlNetWaitUntilStreamSocketDrained(
  1. Pointer<SdlNetStreamSocket> sock,
  2. int timeout
)

Block until all of a stream socket's pending data is sent.

If SDLNet_WriteToStreamSocket() couldn't send all its data immediately, it will queue it to be sent later. This function lets the app sleep until all the data is transmitted.

This function takes a timeout value, represented in milliseconds, of how long to wait for transmission to complete. Specifying a timeout of -1 instructs the library to wait indefinitely, and a timeout of 0 just checks the current status and returns immediately (and is functionally equivalent to calling SDLNet_GetStreamSocketPendingWrites).

If you don't want your program to block, you can call SDLNet_GetStreamSocketPendingWrites from time to time until you get a result <= 0.

If the connection has failed (remote side dropped us, or one of a million other networking failures occurred), this function will report failure by returning -1. Stream sockets only report failure for unrecoverable conditions; once a stream socket fails, you should assume it is no longer usable and should destroy it with SDL_DestroyStreamSocket().

\param sock the stream socket to wait on. \param timeout Number of milliseconds to wait for draining to complete. -1 to wait indefinitely, 0 to check once without waiting. \returns number of bytes still pending transmission, -1 on failure; call SDL_GetError() for details.

\threadsafety You should not operate on the same socket from multiple threads at the same time without supplying a serialization mechanism. However, different threads may access different sockets at the same time without problems.

\since This function is available since SDL_Net 3.0.0.

\sa SDLNet_WriteToStreamSocket \sa SDLNet_GetStreamSocketPendingWrites

extern SDL_DECLSPEC int SDLCALL SDLNet_WaitUntilStreamSocketDrained(SDLNet_StreamSocket *sock, Sint32 timeout)

Implementation

int sdlNetWaitUntilStreamSocketDrained(
    Pointer<SdlNetStreamSocket> sock, int timeout) {
  final sdlNetWaitUntilStreamSocketDrainedLookupFunction =
      libSdl3Net.lookupFunction<
          Int32 Function(Pointer<SdlNetStreamSocket> sock, Int32 timeout),
          int Function(Pointer<SdlNetStreamSocket> sock,
              int timeout)>('SDLNet_WaitUntilStreamSocketDrained');
  return sdlNetWaitUntilStreamSocketDrainedLookupFunction(sock, timeout);
}