C++ WINSOCKS2 Совместное использование Connect и Bind

Рейтинг: 0Ответов: 0Опубликовано: 10.07.2023

Мне необходимо, чтобы сокет отправлял данные с определённой локальной конечной точки. Однако вызов 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;
}

Ответы

Ответов пока нет.