LINUX.ORG.RU

Как переместить дескриптор ?


0

0

есть массив дескрипторов. требуется переместить дескриптор из одной ячейки массива в другую, чтобы дескрипторы открытых сокетов следовали один за другим после закрытия одного из сокетов, но так, чтобы не было двух дескрипторов для одного и того же сокета. sd[i] = sd[j]; не проходит :(

anonymous

Re: Как переместить дескриптор ?

> sd[i] = sd[j]; не проходит :(
почему?

--appx--
#define DESCRTABLE_SIZE 1024
#define DESCR_CLOSED -1

int s[DESCRTABLE_SIZE];

int
dt_init(void)
{
   int i;

   for (i = 0; i < DESCRTABLE_SIZE; i++)
       s[i] = DESCR_CLOSED;
}

/* find first DESCR_CLOSED */
int
find_latest(void)
{
   int i;

   for (i = DESCRTABLE_SIZE; i > -1 && s[i] == DESCR_CLOSED ; i--)

   return i;
}

/* 
 * add fd to descrs table
 * returns -1 if fail
 */
int
dt_add(int fd) {
   int latest;

   latest = find_latest();
   if (latest == DESCRTABLE_SIZE)
       /* overflow */
       return -1;
    
   s[latest] = fd;
   return (latest);
}
/* 
void
close_descr(int n)
{
   int latest_descr;

   latest_descr = find_latest();
   if (latest_descr == 0)
       return;

   latest_descr--;
   
   close(s[n]);
   s[n] = s[latest_descr];
   s[latest_descr] = DESCR_CLOSED;
}

/* For each valid descriptor */
for (i = 0; s[i] != DESCR_CLOSED; i++)
{
    /* XXX */
}

ты это хотел?

lg ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.