C++ WINSOCKS2 Совместное использование Connect и Bind
Мне необходимо, чтобы сокет отправлял данные с определённой локальной конечной точки. Однако вызов connect
после вызова bind
даёт ошибку WSAENETUNREACH
(Network is unreachable). Видимо я делаю что то не так. Как исправить?
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR)
{
return -1;
}
SOCKET streamSocket;
streamSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (streamSocket == INVALID_SOCKET)
{
WSACleanup();
return -1;
}
SOCKADDR_IN localAddr = { 0 };
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(iPort);
if (inet_pton(AF_INET, "127.0.0.1", &localAddr.sin_addr) != 1)
{
closesocket(streamSocket);
WSACleanup();
return -1;
}
if (bind(streamSocket, (PSOCKADDR)&localAddr, sizeof(localAddr)) == SOCKET_ERROR)
{
closesocket(streamSocket);
WSACleanup();
return -1;
}
SOCKADDR_IN serverAddr = { 0 };
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(iDestPort);
if (inet_pton(AF_INET, lpszIp, &serverAddr.sin_addr) != 1)
{
closesocket(streamSocket);
WSACleanup();
return -1;
}
if (connect(streamSocket, (PSOCKADDR)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)
{
cout << "Connect error: " << WSAGetLastError() << endl;
closesocket(streamSocket);
WSACleanup();
return -1;
}
Источник: Stack Overflow на русском