【发布时间】: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 也是如此