version 1.161, 2009/03/23 19:38:04 |
version 1.162, 2009/09/01 14:43:17 |
|
|
socklen_t slen; |
socklen_t slen; |
char buf[1024]; |
char buf[1024]; |
int len, sock; |
int len, sock; |
u_int i; |
u_int i, orig_alloc; |
uid_t euid; |
uid_t euid; |
gid_t egid; |
gid_t egid; |
|
|
for (i = 0; i < sockets_alloc; i++) |
for (i = 0, orig_alloc = sockets_alloc; i < orig_alloc; i++) |
switch (sockets[i].type) { |
switch (sockets[i].type) { |
case AUTH_UNUSED: |
case AUTH_UNUSED: |
break; |
break; |
|
|
case AUTH_CONNECTION: |
case AUTH_CONNECTION: |
if (buffer_len(&sockets[i].output) > 0 && |
if (buffer_len(&sockets[i].output) > 0 && |
FD_ISSET(sockets[i].fd, writeset)) { |
FD_ISSET(sockets[i].fd, writeset)) { |
do { |
len = write(sockets[i].fd, |
len = write(sockets[i].fd, |
buffer_ptr(&sockets[i].output), |
buffer_ptr(&sockets[i].output), |
buffer_len(&sockets[i].output)); |
buffer_len(&sockets[i].output)); |
if (len == -1 && (errno == EAGAIN || |
if (len == -1 && (errno == EAGAIN || |
errno == EINTR)) |
errno == EINTR)) |
continue; |
continue; |
|
break; |
|
} while (1); |
|
if (len <= 0) { |
if (len <= 0) { |
close_socket(&sockets[i]); |
close_socket(&sockets[i]); |
break; |
break; |
|
|
buffer_consume(&sockets[i].output, len); |
buffer_consume(&sockets[i].output, len); |
} |
} |
if (FD_ISSET(sockets[i].fd, readset)) { |
if (FD_ISSET(sockets[i].fd, readset)) { |
do { |
len = read(sockets[i].fd, buf, sizeof(buf)); |
len = read(sockets[i].fd, buf, sizeof(buf)); |
if (len == -1 && (errno == EAGAIN || |
if (len == -1 && (errno == EAGAIN || |
errno == EINTR)) |
errno == EINTR)) |
continue; |
continue; |
|
break; |
|
} while (1); |
|
if (len <= 0) { |
if (len <= 0) { |
close_socket(&sockets[i]); |
close_socket(&sockets[i]); |
break; |
break; |