如果非超级用户,则Win Socket Creation失败,错误代码为10022

时间:2015-08-11 08:02:18

标签: windows winsock winsock2

我在带有winsockets的Windows 7上遇到了一种非常奇怪的行为。两个库(Wt http://www.webtoolkit.eu/ libwebsocket https://libwebsockets.org/)以及我自己的示例代码在以普通用户身份运行时获得了错误代码10022(无效参数。),从未以超级用户身份运行。 lib项目中的开发人员和我都找不到理由。我担心这可能是我们公司中一个非常隐蔽的愚蠢群体规则。

要触发的示例代码:

#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终止)。

1 个答案:

答案 0 :(得分:1)

最后我得到了理由:如果将二进制文件放置在例如:从网络共享/卷执行。

Microsoft已发现问题并提供了一个修补程序:https://support.microsoft.com/en-us/kb/2649107