WSAENOTSOCK после select'а (winsocks)
От: phlegmatik  
Дата: 27.06.13 09:15
Оценка:
Доброго времени суток!

Столкнулся с проблемой поставившей в тупик. Имеется код, следующего вида:

SocketState CheckData(SOCKET s)
{
    fd_set    read_fd, error_fd, write_fd;
    timeval timeout;

    if (s == INVALID_SOCKET)
        return SocketError;

    timeout.tv_sec = 0;
    timeout.tv_usec = 0;

    FD_ZERO(&read_fd);
    FD_ZERO(&error_fd);
    FD_ZERO(&write_fd);
    FD_SET(s, &read_fd);
    FD_SET(s, &error_fd);
    FD_SET(s, &write_fd);
    switch (select(1, &read_fd, &write_fd, &error_fd, &timeout))
    {
    case 0:
        return NoData;
        break;

    case SOCKET_ERROR:
        TDLog.Write("Select Error: %d", GetLastError());
        return SocketError;
        break;

    default:
        if (FD_ISSET(s, &error_fd))
        {
            return SocketError;
        }
        else if (FD_ISSET(s, &read_fd))
        {
            return  HasData;
        }
        break;
    }
    return SocketError;
}


select всё время возвращает ошибку, после GetLastError получаю WSAENOTSOCK. При этом, если попробовать прочитать данные из этого сокета, они читаются. Если кто-то подскажет, в чём может быть причина и куда мне копать, я буду крайне благодарен. Сам ничего нарыть не смог, к сожалению=(
MS Visual Studio 2012

27.06.13 13:58: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Re: WSAENOTSOCK после select'а (winsocks)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 27.06.13 12:30
Оценка:
Здравствуйте, phlegmatik, Вы писали:

P>select всё время возвращает ошибку, после GetLastError получаю WSAENOTSOCK. При этом, если попробовать прочитать данные из этого сокета, они читаются. Если кто-то подскажет, в чём может быть причина и куда мне копать, я буду крайне благодарен. Сам ничего нарыть не смог, к сожалению=(


Выясните, какой *точный* тип данного объекта. Может, это действительно не сокет, тогда часть операций может выполняться неправильно (например, чтение работает, а select — нет). В любом случае проблема выглядит специфичной для WinAPI и WinSock.

Есть данные, как создавался объект?
The God is real, unless declared integer.
Re: WSAENOTSOCK после select'а (winsocks)
От: phlegmatik  
Дата: 27.06.13 18:08
Оценка:
Проблема решена. Дело, естественно, оказалось в кривых руках=)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.