如果没有超级用户,运行套接字创build失败,错误代码为10022

我在winsock上遇到了一个非常奇怪的行为。 两个图书馆(Wt http://www.webtoolkit.eu/libwebsocket https://libwebsockets.org/ ),以及我自己与示例代码得到错误代码10022(无效的参数。)当作为普通用户运行时,并从来没有以超级用户身份运行。 在自由项目的开发者和我都不能find一个理由。 我担心它可能是我们公司里一个非常隐蔽的白痴组织。

要触发的示例代码:

#include <cstdlib> #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include <windows.h> #include <winsock2.h> #include <ws2tcpip.h> #include <iphlpapi.h> #include <iostream> #include <exception> #include <stdexcept> int main(int argc, char** argv) { WSADATA sinfo; int sr = WSAStartup(MAKEWORD(2, 2),&sinfo); if (sr != 0) { std::cout << sr << std::endl; throw std::runtime_error("WSAStartup"); } SOCKET listenSocket = socket(PF_INET, SOCK_STREAM, 0); if (listenSocket == INVALID_SOCKET) { std::cout << "Failed with "<< WSAGetLastError() << " " << GetLastError()<< std::endl; throw std::runtime_error("Socket"); } WSACleanup(); std::cout << "Finished" << std::endl; return 0; } 

输出是:“ 失败10022 10022 ”(然后当然runtime_error导致终止)。

最后,我得到了原因:如果二进制文件被放置在例如从网络共享/卷中执行,则会发生这种情况。

Microsoft已经认识到这些问题并提供了一个修补程序: https : //support.microsoft.com/en-us/kb/2649107