【问题标题】:Why got invalid socket in eclipse debug mode only?为什么只在 Eclipse 调试模式下得到无效的套接字?
【发布时间】:2018-12-04 00:56:07
【问题描述】:

在 Eclipse C++ 中,我在启动调试模式时得到了一个无效的套接字。 错误是 WSAEPROVIDERFAILEDINIT。 仅使用调试器时出现此错误。从run开始,socket的创建就成功了。 在 VisualStudio 下,相同的代码在调试和发布模式下运行。

在不使用套接字时,使用 eclipse 和 mingw 进行调试可以正常工作。
gdb 的配置似乎有问题,因为如果我从 run 或 debug 开始(没有更改我更改配置的时间戳),eclipse 将使用相同的 exe 独立。

配置为:eclipse 4.6.3,Mingw32-gcc-g++ V6.3.0-1,我从\Mingw\lib链接了libws2_32,在Windows 10, 64bit下。
\Mingw\bin 被添加到 Windows 下和 Eclipse 本身的路径变量中。

这是代码:

#include <iostream>
#include <windows.h>
#include <winsock2.h>

using namespace std;

int main()
{
    WORD sockVer = MAKEWORD(2, 0);
    WSADATA wsaData;
    SOCKET listener;
    SOCKADDR_IN servInfo;

    servInfo.sin_family = AF_INET;
    servInfo.sin_addr.s_addr = INADDR_ANY;
    servInfo.sin_port = htons(80);

    WSAStartup(sockVer, &wsaData);

    listener = socket(servInfo.sin_family, SOCK_STREAM, IPPROTO_TCP);

    if (listener == INVALID_SOCKET)
    {
        int lastErr = WSAGetLastError();
        cout << "Error = " << lastErr << endl;
    }
    else
    {
        cout << "Listener = " << listener << endl;
    }

    return 0;
}

【问题讨论】:

  • 您检查过WSAStartup 返回的内容吗?
  • 当 Eclipse 已经在后台运行时,您确定不尝试在 Eclipse 中进行调试?
  • 你为什么要 Winsock 1.1?尝试要求 Winsock 2.0。
  • WSAStartup 返回 0。
  • 使用 Winsock 2.0 具有相同的行为,2.2 也是如此

标签: c++ eclipse mingw


【解决方案1】:

我自己找到的。我删除了工作区并创建了一个新工作区。使用新的它运行。我不知道发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多