SO_DOMAIN do not support on IBM i, using getsockname instead (#8437) (#8500)

This commit is contained in:
Philip Hyunsu Cho 2022-11-30 11:47:59 -08:00 committed by GitHub
parent db14e3feb7
commit 67b657dad0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -287,11 +287,22 @@ class TCPSocket {
#elif defined(__APPLE__) #elif defined(__APPLE__)
return domain_; return domain_;
#elif defined(__unix__) #elif defined(__unix__)
#ifndef __PASE__
std::int32_t domain; std::int32_t domain;
socklen_t len = sizeof(domain); socklen_t len = sizeof(domain);
xgboost_CHECK_SYS_CALL( xgboost_CHECK_SYS_CALL(
getsockopt(handle_, SOL_SOCKET, SO_DOMAIN, reinterpret_cast<char *>(&domain), &len), 0); getsockopt(handle_, SOL_SOCKET, SO_DOMAIN, reinterpret_cast<char *>(&domain), &len), 0);
return ret_iafamily(domain); return ret_iafamily(domain);
#else
struct sockaddr sa;
socklen_t sizeofsa = sizeof(sa);
xgboost_CHECK_SYS_CALL(
getsockname(handle_, &sa, &sizeofsa), 0);
if (sizeofsa < sizeof(uchar_t)*2) {
return ret_iafamily(AF_INET);
}
return ret_iafamily(sa.sa_family);
#endif // __PASE__
#else #else
LOG(FATAL) << "Unknown platform."; LOG(FATAL) << "Unknown platform.";
return ret_iafamily(AF_INET); return ret_iafamily(AF_INET);