|
|
At this point, the peer program is in its main loop.
for (;;) {
int n, secs;
fd_set rfds, wfds;
secs = NOTOK;
rfds = ifds; /* struct copy */
wfds = ofds;
if (smux_fd == NOTOK && !dont_bother_anymore)
secs = 5 * 60L;
else if (rock_and_roll)
FD_SET(smux_fd, &rfds);
else
FD_SET(smux_fd, &wfds);
if (smux_fd >= nfds)
nfds = smux_fd + 1;
if ((n = xselect(nfds, &rfds, &wfds, NULLFD, secs)) == NOTOK) {
LIB_PERROR("failed, xselect");
exit(-1);
}
if (smux_fd == NOTOK && !dont_bother_anymore) {
if (n == 0) {
if ((smux_fd = smux_init(debug)) == NOTOK)
LIB_ERROR2("smux_init: %s [%s]",
smux_error(smux_errno),smux_info);
else
rock_and_roll = 0;
}
} else if (rock_and_roll) {
if (FD_ISSET(smux_fd, &rfds))
doit_smux();
} else if (FD_ISSET(smux_fd, &wfds))
start_smux();
}