WSAGetLastError возвращает WSAENOTSOCK — Причина?

У меня есть что-то подобное в моем коде

    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. В котором говорится, что

Операция сокета без сокета.

Была предпринята попытка операции над чем-то, что не является сокетом. Либо параметр дескриптора сокета не ссылался на допустимый сокет, либо для выбора член fd_set недействителен.

Я что-то не так делаю при настройке сокета? Любые предложения о том, как решить проблему?


person Rajeshwar    schedule 13.08.2013    source источник


Ответы (1)


Либо:

  1. Вы так и не открыли сокет.
  2. Вы испортили значение дескриптора.
  3. Вы закрыли сокет, а затем продолжили его использовать.
person user207421    schedule 13.08.2013