1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
void do_serv(t_env *env)
{
int i;
int fd_max;
fd_set fd_read;
fd_set fd_write;
struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
while (1)
{
fd_max = 0;
FD_ZERO(&fd_read);
FD_ZERO(&fd_write);
for (i = 0; i < MAX_FD; i++)
{
if (env->fd_type[i] != FD_FREE)
{
FD_SET(i, &fd_read);
fd_max = i;
if (env->buff_written[i][0])
FD_SET(i, &fd_write);
}
}
if (select(fd_max + 1, &fd_read, &fd_write, NULL, &tv) == -1)
print_error("select", env);
for (i = 0; i < MAX_FD; i++)
{
if (FD_ISSET(i, &fd_read))
env->fct_read[i](i, env);
if (FD_ISSET(i, &fd_write))
env->fct_write[i](i, env);
}
}
} |
Partager