BIO_S_FD(3)
okay so bestie, welcome to BIO_S_FD(3) from the Library Functions Manual β this is the file descriptor BIO page, and honestly it's giving βwrap your fd in a BIO and goβ energy π
β¨
πΈ NAME πΈ
BIO_s_fd, BIO_set_fd, BIO_get_fd, BIO_new_fd, BIO_fd_non_fatal_error, BIO_fd_should_retry β file descriptor BIO. That's the whole squad, no cap π«Ά
β¨ SYNOPSIS β¨
First, you're rolling with the libcrypto library and this include:
library βlibcryptoβ #include <openssl/bio.h>
and these prototypes, exactly as they live:
const BIO_METHOD *
BIO_s_fd(void);
long
BIO_set_fd(BIO *b, int fd, long close_flag);
long
BIO_get_fd(BIO *b, int *c);
BIO *
BIO_new_fd(int fd, int close_flag);
int
BIO_fd_non_fatal_error(int errnum);
int
BIO_fd_should_retry(int retval);
π DESCRIPTION π
BIO_s_fd()returns the file descriptor BIO method. This is a wrapper around the platform's file descriptor routines such asread(2)andwrite(2).BIO_read(3)andBIO_write(3)read or write the underlying descriptor.BIO_puts(3)is supported butBIO_gets(3)is not β so don't come forBIO_gets(3), it's not invited to this party π- If the close flag is set,
close(2)is called on the underlying file descriptor when the BIO is freed. BIO_reset(3)attempts to set the file pointer to the start of the file usinglseek(fd, 0, 0).BIO_seek(3)sets the file pointer to positionofsfrom start of file usinglseek(fd, ofs, 0).BIO_tell(3)returns the current file position by callinglseek(fd, 0, 1).BIO_set_fd()sets the file descriptor of BIObtofdand the close flag toclose_flag.BIO_get_fd()places the file descriptor incif it is notNULLand also returns the file descriptor.BIO_new_fd()returns a file descriptor BIO usingfdandclose_flag.BIO_fd_non_fatal_error()determines whether the error status codeerrnumrepresents a recoverable error.BIO_fd_should_retry()determines whether a recoverable error occurred by inspecting botherrno(2)andretval, which is supposed to usually be the return value of a previously called function likeBIO_read(3)orBIO_write(3). These two functions are mostly used internally; in application code, it is usually easier and more robust to useBIO_should_retry(3), which works for any BIO type. iykyk π- The behaviour of
BIO_read(3)andBIO_write(3)depends on the behavior of the platform'sread(2)andwrite(2)calls on the descriptor. If the underlying file descriptor is in a non-blocking mode, then the BIO will behave in the manner described in theBIO_read(3)andBIO_should_retry(3)manual pages.
Warning bestie: File descriptor BIOs should not be used for socket I/O. Use socket BIOs instead. This is not the vibe you're looking for for sockets, fr fr π«Ά
BIO_ctrl(3) cmd arguments correspond to macros as follows:
BIO_C_FILE_SEEKβBIO_seek(3)BIO_C_FILE_TELLβBIO_tell(3)BIO_C_GET_FDβBIO_get_fd()BIO_C_SET_FDβBIO_set_fd()BIO_CTRL_GET_CLOSEβBIO_get_close(3)BIO_CTRL_RESETβBIO_reset(3)BIO_CTRL_SET_CLOSEβBIO_set_close(3)
π RETURN VALUES π
BIO_s_fd()returns the file descriptor BIO method.- When called on a file descriptor BIO object,
BIO_method_type(3)returns the constantBIO_TYPE_FDandBIO_method_name(3)returns a pointer to the static string"file descriptor". BIO_set_fd()always returns 1. Iconic consistency, honestly πBIO_get_fd()returns the file descriptor or-1if the BIO has not been initialized.BIO_new_fd()returns the newly allocated BIO orNULLif an error occurred.BIO_fd_non_fatal_error()returns 1 iferrnumisEAGAIN,EALREADY,EINPROGRESS,EINTR, orENOTCONNand 0 otherwise, even iferrnumis 0.BIO_fd_should_retry()returns 1 ifBIO_fd_non_fatal_error(errno)is 1 andretvalis either 0 or -1, or 0 otherwise.
π¦ EXAMPLES π¦
This is a file descriptor BIO version of "Hello World":
BIO *out;
out = BIO_new_fd(fileno(stdout), BIO_NOCLOSE);
BIO_printf(out, "Hello World\n");
BIO_free(out);
π SEE ALSO π
π HISTORY π
BIO_s_fd(),BIO_set_fd(), andBIO_get_fd()first appeared in SSLeay 0.6.0.BIO_fd_should_retry()first appeared in SSLeay 0.6.5.BIO_new_fd()andBIO_fd_non_fatal_error()first appeared in SSLeay 0.8.0.- All these functions have been available since OpenBSD 2.4. Vintage but still main character energy π
mwah π this page is from Debian, dated September 10, 2026 β periodt, go wrap a file descriptor, bestie π π
π¦ where this page comes from
- arch rolling: libressl 4.4.0-1 Β· ISC AND custom:OpenSSL
- Copyright (c) 2022 Ingo Schwarze <schwarze@openbsd.org>
- Copyright (c) 2000 The OpenSSL Project. All rights reserved
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms