SSL_STREAM_CONCLUDE(3SSL)

πŸ’… SSL_stream_conclude β€” the 3SSL girlies' guide πŸŽ€

okay bestie, gather round, because this one is short but it's important. This is the manual page for SSL_stream_conclude, and it lives in section 3SSL of the OpenSSL manuals (that's the "library functions" section, iykyk). It's giving very niche, very QUIC, very demure. Let's get into it. ✨


✨ NAME ✨

SSL_stream_conclude β€” conclude the sending part of a QUIC stream πŸ¦‹

like... you're done talking, bestie, but you can still listen. the duality. πŸ’…


✨ SYNOPSIS ✨

#include <openssl/ssl.h>

__owur int SSL_stream_conclude(SSL *s, uint64_t flags);

^(yes that __owur is real, it means "the return value is a warning-worthy thing", we stan a compiler that cares πŸ’–)


✨ DESCRIPTION ✨

okay so. SSL_stream_conclude() signals the normal end-of-stream condition for the send part of a QUIC stream. That's the whole vibe. 🫢

If you call it on a QUIC connection SSL object that has an associated default stream, it signals the end of that single stream to the peer. just the one. not a group announcement. πŸ“£

Here's the part everyone worries about: any data you already queued for transmission via a call to SSL_write() will still be written in a reliable manner before the end-of-stream gets signalled β€” assuming the connection remains healthy. So think of this function as appending a logical end-of-stream marker after any data you've previously written to the stream via SSL_write() calls. It's a lid on the jar, not a shredder. 🌸

not me needing to say this but: further attempts to call SSL_write() after calling this function will fail. like. it's over. the writing era has concluded. 😭

When you call this on a stream, the receive part of the stream stays unaffected πŸ’œ β€” the peer may keep sending data until it also signals the end of the stream. So SSL_read() is still fully usable. You closed your mouth, not your ears. iconic behaviour, honestly. πŸ‘‘

flags is reserved and should be set to 0. just zero. nothing else. don't be creative. πŸ™ˆ

Only the first call to this function has any effect for a given stream β€” subsequent calls are no-ops. And that's considered a success case, so don't come for it. βœ…

This function is not supported on an object other than a QUIC stream SSL object. It's a QUIC stream girly and it knows it. 🧚


✨ RETURN VALUES ✨

  • Returns 1 on success πŸŽ‰
  • Returns 0 on failure πŸ’€
  • Returns 0 if called on an SSL object that doesn't represent a QUIC stream β€” so if you're getting a zero and you're confused, vibe check your object type first, bestie πŸ“

✨ SEE ALSO ✨

the squad. go read them. πŸ’–


✨ HISTORY ✨

The SSL_stream_conclude() function was added in OpenSSL 3.2. so if you're on something older, that's why your code is screaming at you. no cap. 🌈


Copyright 2022-2023 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.


and that's the whole page, bestie!! πŸ’–βœ¨ this was SSL_STREAM_CONCLUDE(3SSL) from OpenSSL 4.0.3, dated 2026-09-29 β€” go forth and conclude your streams responsibly, mwah πŸŽ€πŸ’…πŸ¦‹

πŸ“¦ where this page comes from