in cpp/Riosock/Riosock.cpp [411:480]
SOCKET RIOSOCKAPI CreateRIOSocket(
_Out_ SOCKADDR *localAddr,
_Inout_ int *localAddrLen
)
{
// DWORD dwFlags = WSA_FLAG_NO_HANDLE_INHERIT | WSA_FLAG_OVERLAPPED | WSA_FLAG_REGISTERED_IO;
auto socket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, nullptr, 0, WSA_FLAG_REGISTERED_IO);
if (INVALID_SOCKET == socket)
{
DWORD errorCode = WSAGetLastError();
SetLastError(errorCode);
return INVALID_SOCKET;
}
// Enables SIO_LOOPBACK_FAST_PATH
auto OptionValue = 1;
DWORD NumberOfBytesReturned = 0;
if (WSAIoctl(socket,
SIO_LOOPBACK_FAST_PATH,
&OptionValue,
sizeof(OptionValue),
nullptr, 0,
&NumberOfBytesReturned,
nullptr, nullptr) == SOCKET_ERROR)
{
DWORD errorCode = WSAGetLastError();
closesocket(socket);
SetLastError(errorCode);
return INVALID_SOCKET;
}
// Bind socket for exclusive access
const BOOL bindExclUse = 1;
if (setsockopt(socket,
SOL_SOCKET,
SO_EXCLUSIVEADDRUSE,
reinterpret_cast<const char *>(&bindExclUse),
sizeof(bindExclUse)) == SOCKET_ERROR)
{
// Unexpected failure: report it then close our socket
DWORD errorCode = WSAGetLastError();
closesocket(socket);
SetLastError(errorCode);
return INVALID_SOCKET;
}
// Bind the socket to the loop-back address
SOCKADDR_IN sockAddr;
sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
sockAddr.sin_port = htons(0);
if (bind(socket, reinterpret_cast<SOCKADDR *>(&sockAddr), sizeof(sockAddr)) == SOCKET_ERROR)
{
DWORD errorCode = WSAGetLastError();
closesocket(socket);
SetLastError(errorCode);
return INVALID_SOCKET;
}
// Retrieve the local name (addr) of the socket
if (getsockname(socket, localAddr, localAddrLen) == SOCKET_ERROR)
{
DWORD errorCode = WSAGetLastError();
closesocket(socket);
SetLastError(errorCode);
return INVALID_SOCKET;
}
return socket;
}