You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The behavior of the method seems to be different on AIX and Linux:
auto err = socket1->bind(ntsa::Endpoint(ntsa::Ipv4Endpoint("127.0.0.1", 0)), true);
assert(!err);
ntsa::Endpoint endpoint;
socket->sourceEndpoint(&endpoint);
err = socket2->bind(ntsa::Endpoint(ntsa::Ipv4Endpoint("127.0.0.1", 0)), true);
assert(!err);
// on AIX the second bind succeeds, while on Linux this fails.
I attached the relevant code in ntsu_socketoptionutil.cpp below. I think SO_REUSEPORT is required for the above code to work on Linux.
I understand making the behavior consistent on all support platform might be very difficult or impossible, so it's not a straight forward fix.
ntsa::Error SocketOptionUtil::setReuseAddress(ntsa::Handle socket,
bool reuseAddress)
{
{
int optionValue = static_cast<int>(reuseAddress);
int rc = setsockopt(socket,
SOL_SOCKET,
SO_REUSEADDR,
reinterpret_cast<char*>(&optionValue),
sizeof(optionValue));
if (rc != 0) {
returnntsa::Error(errno);
}
}
#if defined(BSLS_PLATFORM_OS_AIX) || defined(BSLS_PLATFORM_OS_DARWIN) || \
defined(BSLS_PLATFORM_OS_FREEBSD)
{
int optionValue = static_cast<int>(reuseAddress);
int rc = setsockopt(socket,
SOL_SOCKET,
SO_REUSEPORT,
reinterpret_cast<char*>(&optionValue),
sizeof(optionValue));
if (rc != 0) {
returnntsa::Error(errno);
}
}
#endifreturnntsa::Error();
}
The text was updated successfully, but these errors were encountered:
The behavior of the method seems to be different on AIX and Linux:
I attached the relevant code in ntsu_socketoptionutil.cpp below. I think SO_REUSEPORT is required for the above code to work on Linux.
I understand making the behavior consistent on all support platform might be very difficult or impossible, so it's not a straight forward fix.
The text was updated successfully, but these errors were encountered: