WSAGetLastError 返回 0

问题描述 投票:0回答:1

我正在使用winsock2的套接字创建一个项目 我使用系统调用连接到本地 IP 地址上的套接字,然后实现了一个用于错误处理目的的简单方法。

// Client-side
int LPTF_SOCKET::connectLPTFSocket()
{
  if (connect(sockfd, (struct sockaddr *)&server, sizeof(server)) < 0)
  {
    std::cerr << "Connection failed: " << WSAGetLastError() << std::endl;
    closesocket(sockfd);
    WSACleanup();
    return 1;
  }
  std::cerr << "connect returned success" << std::endl;
  return 0;
}

但是,每当发生错误时,我的项目合作伙伴都会收到代码 10047。此后它已修复,但我总是收到错误 0,这很奇怪,因为它没有出现在官方文档中

问题是,这个错误代码出现在我的两台电脑上,所以这就更奇怪了。 我一开始以为这可能是由于防火墙的原因,但我不确定。你们知道发生了什么事吗?我不能再继续这个项目了

我尝试在服务器端运行该程序。它工作得很好,但不适用于客户端。

c++ sockets winsock2
1个回答
0
投票

std::cerr 调用可能在打印“连接失败”时清除错误状态。

尝试这个调整:

  if (connect(sockfd, (struct sockaddr *)&server, sizeof(server)) < 0)
  {
    DWORD lastErr = WSAGetLastError();
    std::cerr << "Connection failed: " << lastError << std::endl;
    closesocket(sockfd);
    WSACleanup();
    return 1;
  }
© www.soinside.com 2019 - 2024. All rights reserved.