【问题标题】:WSAGetLastError returns WSAENOTSOCK - Cause?WSAGetLastError 返回 WSAENOTSOCK - 原因?
【发布时间】:2013-08-14 13:36:26
【问题描述】:

我的代码中有这样的东西

    WSADATA wsadata;

    int error = WSAStartup(0x0202, &wsadata);

    SOCKADDR_IN target; //Socket address information

    target.sin_family = AF_INET; // address family Internet
    target.sin_port = htons (5005); 
    target.sin_addr.s_addr = inet_addr ("127.0.0.1"); 

    clntSocket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); //Create socket
    

    if (::connect(clntSocket, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR)
    {
        //Could not connect
                    __debugbreak();
    }
    else
    { 
        //Connected - Now receive data
        do 
        {
            char my_stream[800];
            iResult =  recv(clntSocket,my_stream,sizeof(my_stream),0);
            if(iResult<0)
            {
                int a = WSAGetLastError();
                //Receives 10038 - WSAENOTSOCK
            }
        } while( iResult > 0 );    
    }

而且我有时(偶尔)会得到 10038。这说明

非套接字上的套接字操作。

试图对不是套接字的东西进行操作。套接字句柄参数没有引用有效的套接字,或者对于 select,fd_set 的成员无效。

我在设置套接字时做错了什么吗?有关如何解决问题的任何建议?

【问题讨论】:

    标签: c++ sockets client tcp-ip


    【解决方案1】:

    要么:

    1. 您从未打开过套接字。
    2. 您已损坏句柄值。
    3. 您已关闭套接字,然后继续使用它。

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2011-07-15
      • 1970-01-01
      • 2018-07-22
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2012-08-25
      相关资源
      最近更新 更多