Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поля fd_set 
V
    Опции темы
Enelar
Дата 25.6.2010, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Как называются поля структуры fd_set (для сокетов) в линухе.
Мне неприемлемо пользоваться макросами типа FD_SET, а нужно писать напрямую.
Например в винде поля называются fd_count и fd_array и я просто пишу
Код

    for (int i = 0; i < FD_SETSIZE; i++)

      if (Bank[i] != INVALID_SOCKET && Bank[i] != 0)

      arr.fd_array[j++] = Bank[i];

    arr.fd_count = j;

как это сделать в линухе?
Код

    for (int i = 0; i < FD_SETSIZE; i++)

      if (Bank[i] > -1 && Bank[i] != 0)

      arr./*???*/[j++] = Bank[i];

    arr./*???*/ = j;

PM MAIL   Вверх
Enelar
Дата 25.6.2010, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Слава гуглу!
Код

#ifndef    FD_SETSIZE
#define    FD_SETSIZE    1024
#endif
#define    NBBY    8        /* number of bits in a byte */
typedef    long    fd_mask;
#define    NFDBITS    (sizeof (fd_mask) * NBBY)    /* bits per mask */
#define    howmany(x,y)    (((x)+((y)-1))/(y))
typedef    struct _types_fd_set {
    fd_mask    fds_bits[howmany(FD_SETSIZE, NFDBITS)];
} _types_fd_set;

#define fd_set _types_fd_set

вопрос закрыт
PM MAIL   Вверх
Enelar
Дата 25.6.2010, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



кстати я может что то не понимаю... но кажется в макросе howmany должен стоять знак умножить.
или я не прав...

теперь понял)

Это сообщение отредактировал(а) Enelar - 25.6.2010, 05:22
PM MAIL   Вверх
Enelar
Дата 25.6.2010, 04:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



Нет, вопрос нифига не решен.
Если добавление сокета я сделал через FD_SET
то поиск сокета FD_ISSET меня совсем не устраивает, оно будет долго в моей идеологии. 
посему вопрос, как из структуры fd_set вытянуть сокет.
(в винде это было просто a.fd_array[i])
здесь же сокет номер 4 превращяется в 16. (побитовый сдвиг вправо на два ничего не дает)

Это сообщение отредактировал(а) Enelar - 25.6.2010, 04:45
PM MAIL   Вверх
Enelar
Дата 25.6.2010, 05:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 13.1.2008

Репутация: нет
Всего: 1



если сокет имеет сообщение, то i-ый бит fds_bits = 1 (где i = дескриптору сокета).
При больших количествах сокетов на лицо геморой, но я надеюсь что это не так.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.