Check BIO_dgram_sctp_wait_for_dry() return value for error
Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
parent
13cbe5e711
commit
03a1c85062
@ -1404,7 +1404,12 @@ static int dgram_sctp_write(BIO *b, const char *in, int inl)
|
|||||||
* If we have to send a shutdown alert message and the socket is not dry
|
* If we have to send a shutdown alert message and the socket is not dry
|
||||||
* yet, we have to save it and send it as soon as the socket gets dry.
|
* yet, we have to save it and send it as soon as the socket gets dry.
|
||||||
*/
|
*/
|
||||||
if (data->save_shutdown && !BIO_dgram_sctp_wait_for_dry(b)) {
|
if (data->save_shutdown) {
|
||||||
|
ret = BIO_dgram_sctp_wait_for_dry(b);
|
||||||
|
if (ret < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (ret == 0) {
|
||||||
char *tmp;
|
char *tmp;
|
||||||
data->saved_message.bio = b;
|
data->saved_message.bio = b;
|
||||||
if ((tmp = OPENSSL_malloc(inl)) == NULL) {
|
if ((tmp = OPENSSL_malloc(inl)) == NULL) {
|
||||||
@ -1417,6 +1422,7 @@ static int dgram_sctp_write(BIO *b, const char *in, int inl)
|
|||||||
data->saved_message.length = inl;
|
data->saved_message.length = inl;
|
||||||
return inl;
|
return inl;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
iov[0].iov_base = (char *)in;
|
iov[0].iov_base = (char *)in;
|
||||||
iov[0].iov_len = inl;
|
iov[0].iov_len = inl;
|
||||||
@ -1733,6 +1739,19 @@ int BIO_dgram_sctp_notification_cb(BIO *b,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BIO_dgram_sctp_wait_for_dry - Wait for SCTP SENDER_DRY event
|
||||||
|
* @b: The BIO to check for the dry event
|
||||||
|
*
|
||||||
|
* Wait until the peer confirms all packets have been received, and so that
|
||||||
|
* our kernel doesn't have anything to send anymore. This is only received by
|
||||||
|
* the peer's kernel, not the application.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* -1 on error
|
||||||
|
* 0 when not dry yet
|
||||||
|
* 1 when dry
|
||||||
|
*/
|
||||||
int BIO_dgram_sctp_wait_for_dry(BIO *b)
|
int BIO_dgram_sctp_wait_for_dry(BIO *b)
|
||||||
{
|
{
|
||||||
int is_dry = 0;
|
int is_dry = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user