version 1.54, 2000/05/01 20:21:40 |
version 1.55, 2000/05/02 19:33:12 |
|
|
return c; |
return c; |
} |
} |
|
|
|
void |
|
set_nonblock(int fd) |
|
{ |
|
int val; |
|
val = fcntl(fd, F_GETFL, 0); |
|
if (val < 0) { |
|
error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno)); |
|
return; |
|
} |
|
if (val & O_NONBLOCK) |
|
return; |
|
debug("fd %d setting O_NONBLOCK", fd); |
|
val |= O_NONBLOCK; |
|
if (fcntl(fd, F_SETFL, val) == -1) |
|
error("fcntl(%d, F_SETFL, O_NONBLOCK): %s", fd, strerror(errno)); |
|
} |
|
|
/* |
/* |
* register filedescriptors for a channel, used when allocating a channel or |
* Register filedescriptors for a channel, used when allocating a channel or |
* when the channel consumer/producer is ready, e.g. shell exec'd |
* when the channel consumer/producer is ready, e.g. shell exec'd |
*/ |
*/ |
|
|
|
|
if (efd > channel_max_fd_value) |
if (efd > channel_max_fd_value) |
channel_max_fd_value = efd; |
channel_max_fd_value = efd; |
/* XXX set close-on-exec -markus */ |
/* XXX set close-on-exec -markus */ |
|
|
c->rfd = rfd; |
c->rfd = rfd; |
c->wfd = wfd; |
c->wfd = wfd; |
c->sock = (rfd == wfd) ? rfd : -1; |
c->sock = (rfd == wfd) ? rfd : -1; |
c->efd = efd; |
c->efd = efd; |
c->extended_usage = extusage; |
c->extended_usage = extusage; |
|
if (rfd != -1) |
|
set_nonblock(rfd); |
|
if (wfd != -1) |
|
set_nonblock(wfd); |
|
if (efd != -1) |
|
set_nonblock(efd); |
} |
} |
|
|
/* |
/* |