diff options
author | Richard Levitte <levitte@openssl.org> | 2016-02-10 22:33:44 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2016-02-11 14:13:01 +0100 |
commit | c72fb77ff2644cf7edc9821a431c2faf123d4daf (patch) | |
tree | ce5d7402596221ea9f2e6333afb4a5b838b40f82 /crypto/bio/b_addr.c | |
parent | 210ac6824670b4d207f6ea7257d21adb44986ee4 (diff) |
Rework BIO_ADDRINFO_protocol() to return correct values
As noted already, some platforms don't fill in ai_protocol as
expected. To circumvent that, we have BIO_ADDRINFO_protocol() to
compute a sensible answer in that case.
Reviewed-by: Kurt Roeckx <kurt@openssl.org>
Diffstat (limited to 'crypto/bio/b_addr.c')
-rw-r--r-- | crypto/bio/b_addr.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/crypto/bio/b_addr.c b/crypto/bio/b_addr.c index 9131dcdd16..459443b3d9 100644 --- a/crypto/bio/b_addr.c +++ b/crypto/bio/b_addr.c @@ -379,8 +379,24 @@ int BIO_ADDRINFO_socktype(const BIO_ADDRINFO *bai) int BIO_ADDRINFO_protocol(const BIO_ADDRINFO *bai) { - if (bai != NULL) - return bai->bai_protocol; + if (bai != NULL) { + if (bai->bai_protocol != 0) + return bai->bai_protocol; + +#ifdef AF_UNIX + if (bai->bai_family == AF_UNIX) + return 0; +#endif + + switch (bai->bai_socktype) { + case SOCK_STREAM: + return IPPROTO_TCP; + case SOCK_DGRAM: + return IPPROTO_UDP; + default: + break; + } + } return 0; } |