return 0;
data = (BIO_CONNECT *)a->ptr;
- if (data->dgram_bio != NULL)
- BIO_free(data->dgram_bio);
+ BIO_free(data->dgram_bio);
if (a->shutdown) {
conn_close_socket(a);
return ret;
}
- if (data->dgram_bio != NULL)
- return BIO_read(data->dgram_bio, out, outl);
+ if (data->dgram_bio != NULL) {
+ BIO_clear_retry_flags(b);
+ ret = BIO_read(data->dgram_bio, out, outl);
+ BIO_set_flags(b, BIO_get_retry_flags(data->dgram_bio));
+ return ret;
+ }
if (out != NULL) {
clear_socket_error();
return ret;
}
- if (data->dgram_bio != NULL)
- return BIO_write(data->dgram_bio, in, inl);
+ if (data->dgram_bio != NULL) {
+ BIO_clear_retry_flags(b);
+ ret = BIO_write(data->dgram_bio, in, inl);
+ BIO_set_flags(b, BIO_get_retry_flags(data->dgram_bio));
+ return ret;
+ }
clear_socket_error();
# ifndef OPENSSL_NO_KTLS
BIO_set_conn_address, BIO_set_conn_ip_family,
BIO_get_conn_hostname, BIO_get_conn_port,
BIO_get_conn_address, BIO_get_conn_ip_family,
-BIO_set_nbio, BIO_set_sock_type, BIO_get_sock_type, BIO_get_dgram_bio,
+BIO_set_nbio, BIO_set_sock_type, BIO_get_sock_type, BIO_get0_dgram_bio,
BIO_do_connect - connect BIO
=head1 SYNOPSIS
int BIO_set_sock_type(BIO *b, int sock_type);
int BIO_get_sock_type(BIO *b);
- int BIO_get_dgram_bio(BIO *B, BIO **dgram_bio);
+ int BIO_get0_dgram_bio(BIO *B, BIO **dgram_bio);
long BIO_do_connect(BIO *b);
created is a UDP datagram socket handled via L<BIO_s_datagram(3)>.
I/O calls such as L<BIO_read(3)> and L<BIO_write(3)> are forwarded transparently
to an internal L<BIO_s_datagram(3)> instance. The created L<BIO_s_datagram(3)>
-instance can be retrieved using BIO_get_dgram_bio() if desired, which writes
-a pointer to the L<BIO_s_datagram(3)> instance to I<*dgram_bio>.
+instance can be retrieved using BIO_get0_dgram_bio() if desired, which writes
+a pointer to the L<BIO_s_datagram(3)> instance to I<*dgram_bio>. The lifetime
+of the internal L<BIO_s_datagram(3)> is managed by BIO_s_connect() and does not
+need to be freed by the caller.
BIO_get_sock_type() retrieves the value set using BIO_set_sock_type().
BIO_get_sock_type() returns a socket type or 0 if the call is not supported.
-BIO_get_dgram_bio() returns 1 on success or 0 on failure.
+BIO_get0_dgram_bio() returns 1 on success or 0 on failure.
=head1 EXAMPLES
# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL)
# define BIO_set_sock_type(b,t) BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL)
# define BIO_get_sock_type(b) BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL)
-# define BIO_get_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p))
+# define BIO_get0_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p))
/* BIO_s_accept() */
# define BIO_set_accept_name(b,name) BIO_ctrl(b,BIO_C_SET_ACCEPT,0, \
* We do this as late as possible because some BIOs (e.g. BIO_s_connect)
* may not be able to provide us with a peer address until they have
* finished their own processing. They may not be able to perform this
- * processing until an application has figured configuring that BIO
+ * processing until an application has finished configuring that BIO
* (e.g. with setter calls), which might happen after SSL_set_bio is
* called.
*/
BIO_dgram_recv_timedout define
BIO_dgram_send_timedout define
BIO_dgram_detect_peer_addr define
-BIO_get_dgram_bio define
+BIO_get0_dgram_bio define
BIO_get_sock_type define
BIO_set_sock_type define
BIO_do_accept define