###### (This function is part of SDL_net, a separate library from SDL.)
# SDLNet_WaitUntilStreamSocketDrained

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

## Header File

Defined in [<SDL3_net/SDL_net.h>](https://github.com/libsdl-org/SDL_net/blob/main/include/SDL3_net/SDL_net.h)

## Syntax

```c
int SDLNet_WaitUntilStreamSocketDrained(SDLNet_StreamSocket *sock, Sint32 timeout);
```

## Function Parameters

|                                              |             |                                                                                                                    |
| -------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------ |
| [SDLNet_StreamSocket](SDLNet_StreamSocket) * | **sock**    | the stream socket to wait on.                                                                                      |
| Sint32                                       | **timeout** | Number of milliseconds to wait for draining to complete. -1 to wait indefinitely, 0 to check once without waiting. |

## Return Value

(int) Returns number of bytes still pending transmission, -1 on failure;
call SDL_GetError() for details.

## Remarks

If [SDLNet_WriteToStreamSocket](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](SDLNet_GetStreamSocketPendingWrites)).

If you don't want your program to block, you can call
[SDLNet_GetStreamSocketPendingWrites](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().

## Thread Safety

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.

## Version

This function is available since SDL_Net 3.0.0.

## See Also

- [SDLNet_WriteToStreamSocket](SDLNet_WriteToStreamSocket)
- [SDLNet_GetStreamSocketPendingWrites](SDLNet_GetStreamSocketPendingWrites)

----
[CategoryAPI](CategoryAPI), [CategoryAPIFunction](CategoryAPIFunction), [CategorySDLNet](CategorySDLNet)