【问题标题】:Function connect() return zero regardless whether it succeeded to connect or not无论连接是否成功,函数 connect() 都返回零
【发布时间】:2011-06-13 21:29:33
【问题描述】:

当我在 i7 计算机上使用 connect() 函数时,无论连接是否成功,它总是返回零。我只是没有另一个应用程序可以连接,它仍然返回零(服务器地址 127.0.0.1)。

当我在不同的计算机上运行相同的应用程序时,它的行为正确。那么,有什么问题呢?

谢谢。

从下面的答案编辑移动。

代码

struct hostent* pHostEntry;

pHostEntry = gethostbyname(host);

if(pHostEntry == NULL)
{
    return 0;
}

struct in_addr* host_addr = (struct in_addr*) * pHostEntry->h_addr_list;

if(host_addr == NULL)
{
    return 0;
}

long sockfd;

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
    return 0;
}

memset((char*) &serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr  = *host_addr;
serv_addr.sin_port   = htons(port);

if(connect(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == SOCKET_ERROR)
{
    CloseSocket();
    sockfd = -1;
    return 0;
}

来了。在这里,我总是零。我当然检查了是否有任何其他应用程序侦听同一端口。那里没人。此外,如果我有一个,那么如果我的服务器打开,我就无法工作。但是当我的服务器开启时,我没有任何冲突。 i7 -> Intel(R( Core(TM) i7 CPU 930 @ 2,80GHz 2.80 GHz 我用这个代码有一段时间了。我有几台电脑有不同的操作系统和芯片。只有这个(使用 OS Windows 7)有这样的一个问题。我只是想知道是否有人遇到过同样的问题。谢谢

【问题讨论】:

  • 一些代码在这里真的很有帮助。
  • 这是哪个connect() 函数?可以贴一下代码吗?
  • 也许其他一些应用程序碰巧在你连接的端口上监听。如果您需要更多帮助,请发布一些代码。
  • @bmargulies 它是英特尔的 x64 处理器。我希望你知道这一点。
  • @Rafe 我希望 OP 的意思是相关,而芯片名称不是。

标签: c++ tcp


【解决方案1】:

Windows 7 完全有可能为远程服务器返回 IP6 地址。我建议你检查pHostEntry-&gt;h_addrtype的值。

【讨论】:

    【解决方案2】:

    这一行是错误的:

    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    

    在 Unix 上,这是可行的,因为有效的文件描述符往往是小的非负数。但是根据the documentation for socket-1 是唯一的错误返回码。其他负数不是错误。

    现在您尝试在 Windows 上运行此代码,并且描述符是小的非负数的假设被打破。

    Windows 文档非常清晰。 socket returns INVALID_SOCKET in case of error, all other values indicate success.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2013-09-24
      • 2012-01-07
      • 2021-12-15
      • 2022-10-04
      • 2018-03-10
      • 2021-03-04
      相关资源
      最近更新 更多