sdlNetWriteToStreamSocket function

bool sdlNetWriteToStreamSocket(
  1. Pointer<SdlNetStreamSocket> sock,
  2. Pointer<NativeType> buf,
  3. int buflen
)

Send bytes over a stream socket to a remote system.

Stream sockets are reliable, which means data sent over them will arrive in the order it was transmitted, and the system will retransmit data as necessary to ensure its delivery. Which is to say, short of catastrophic failure, data will arrive, possibly with severe delays. Also, "catastrophic failure" isn't an uncommon event.

(This is opposed to Datagram sockets, which send chunks of data that might arrive in any order, or not arrive at all, but you never wait for missing chunks to show up.)

Stream sockets are bidirectional; you can read and write from the same stream, and the other end of the connection can, too.

This call never blocks; if it can't send the data immediately, the library will queue it for later transmission. You can use SDLNet_GetStreamSocketPendingWrites() to see how much is still queued for later transmission, or SDLNet_WaitUntilStreamSocketDrained() to block until all pending data has been sent.

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 false. 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 send data through. \param buf a pointer to the data to send. \param buflen the size of the data to send, in bytes. \returns true if data sent or queued for transmission, false 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_GetStreamSocketPendingWrites \sa SDLNet_WaitUntilStreamSocketDrained \sa SDLNet_ReadFromStreamSocket

extern SDL_DECLSPEC bool SDLCALL SDLNet_WriteToStreamSocket(SDLNet_StreamSocket *sock, const void *buf, int buflen)

Implementation

bool sdlNetWriteToStreamSocket(
    Pointer<SdlNetStreamSocket> sock, Pointer<NativeType> buf, int buflen) {
  final sdlNetWriteToStreamSocketLookupFunction = libSdl3Net.lookupFunction<
      Uint8 Function(Pointer<SdlNetStreamSocket> sock, Pointer<NativeType> buf,
          Int32 buflen),
      int Function(Pointer<SdlNetStreamSocket> sock, Pointer<NativeType> buf,
          int buflen)>('SDLNet_WriteToStreamSocket');
  return sdlNetWriteToStreamSocketLookupFunction(sock, buf, buflen) == 1;
}