diff options
| author | Ron Yorston <rmy@pobox.com> | 2017-05-29 16:09:57 +0100 |
|---|---|---|
| committer | Ron Yorston <rmy@pobox.com> | 2017-05-29 16:09:57 +0100 |
| commit | c2002eae394c230d6b89073c9ff71bc86a7875e8 (patch) | |
| tree | f544d05a8df6f1793f6818085af0381d951aa387 | |
| parent | a664104c168722cb046e0bd54d1d932855a03341 (diff) | |
| download | busybox-w32-c2002eae394c230d6b89073c9ff71bc86a7875e8.tar.gz busybox-w32-c2002eae394c230d6b89073c9ff71bc86a7875e8.tar.bz2 busybox-w32-c2002eae394c230d6b89073c9ff71bc86a7875e8.zip | |
Revert "nc: use poll() instead of select()"
This reverts commit 5b3b468ec0c6e6dfe772722dbd6b2c57cef817b5.
| -rw-r--r-- | networking/nc.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/networking/nc.c b/networking/nc.c index d2b1ddcce..1b70434ac 100644 --- a/networking/nc.c +++ b/networking/nc.c | |||
| @@ -117,7 +117,7 @@ int nc_main(int argc, char **argv) | |||
| 117 | IF_NOT_NC_EXTRA (const) unsigned delay = 0; | 117 | IF_NOT_NC_EXTRA (const) unsigned delay = 0; |
| 118 | IF_NOT_NC_EXTRA (const int execparam = 0;) | 118 | IF_NOT_NC_EXTRA (const int execparam = 0;) |
| 119 | IF_NC_EXTRA (char **execparam = NULL;) | 119 | IF_NC_EXTRA (char **execparam = NULL;) |
| 120 | struct pollfd pfds[2]; | 120 | fd_set readfds, testfds; |
| 121 | int opt; /* must be signed (getopt returns -1) */ | 121 | int opt; /* must be signed (getopt returns -1) */ |
| 122 | 122 | ||
| 123 | if (ENABLE_NC_SERVER || ENABLE_NC_EXTRA) { | 123 | if (ENABLE_NC_SERVER || ENABLE_NC_EXTRA) { |
| @@ -235,28 +235,29 @@ int nc_main(int argc, char **argv) | |||
| 235 | IF_NC_EXTRA(bb_perror_msg_and_die("can't execute '%s'", execparam[0]);) | 235 | IF_NC_EXTRA(bb_perror_msg_and_die("can't execute '%s'", execparam[0]);) |
| 236 | } | 236 | } |
| 237 | 237 | ||
| 238 | /* loop copying stdin to cfd, and cfd to stdout */ | 238 | /* Select loop copying stdin to cfd, and cfd to stdout */ |
| 239 | 239 | ||
| 240 | pfds[0].fd = STDIN_FILENO; | 240 | FD_ZERO(&readfds); |
| 241 | pfds[0].events = POLLIN; | 241 | FD_SET(cfd, &readfds); |
| 242 | pfds[1].fd = cfd; | 242 | FD_SET(STDIN_FILENO, &readfds); |
| 243 | pfds[1].events = POLLIN; | ||
| 244 | 243 | ||
| 245 | #define iobuf bb_common_bufsiz1 | 244 | #define iobuf bb_common_bufsiz1 |
| 246 | setup_common_bufsiz(); | 245 | setup_common_bufsiz(); |
| 247 | for (;;) { | 246 | for (;;) { |
| 248 | int fdidx; | 247 | int fd; |
| 249 | int ofd; | 248 | int ofd; |
| 250 | int nread; | 249 | int nread; |
| 251 | 250 | ||
| 252 | if (safe_poll(pfds, 2, -1) < 0) | 251 | testfds = readfds; |
| 253 | bb_perror_msg_and_die("poll"); | ||
| 254 | 252 | ||
| 255 | fdidx = 0; | 253 | if (select(cfd + 1, &testfds, NULL, NULL, NULL) < 0) |
| 254 | bb_perror_msg_and_die("select"); | ||
| 255 | |||
| 256 | fd = STDIN_FILENO; | ||
| 256 | while (1) { | 257 | while (1) { |
| 257 | if (pfds[fdidx].revents) { | 258 | if (FD_ISSET(fd, &testfds)) { |
| 258 | nread = safe_read(pfds[fdidx].fd, iobuf, COMMON_BUFSIZE); | 259 | nread = safe_read(fd, iobuf, COMMON_BUFSIZE); |
| 259 | if (fdidx != 0) { | 260 | if (fd == cfd) { |
| 260 | if (nread < 1) | 261 | if (nread < 1) |
| 261 | exit(EXIT_SUCCESS); | 262 | exit(EXIT_SUCCESS); |
| 262 | ofd = STDOUT_FILENO; | 263 | ofd = STDOUT_FILENO; |
| @@ -265,7 +266,7 @@ int nc_main(int argc, char **argv) | |||
| 265 | /* Close outgoing half-connection so they get EOF, | 266 | /* Close outgoing half-connection so they get EOF, |
| 266 | * but leave incoming alone so we can see response */ | 267 | * but leave incoming alone so we can see response */ |
| 267 | shutdown(cfd, SHUT_WR); | 268 | shutdown(cfd, SHUT_WR); |
| 268 | pfds[0].fd = -1; | 269 | FD_CLR(STDIN_FILENO, &readfds); |
| 269 | } | 270 | } |
| 270 | ofd = cfd; | 271 | ofd = cfd; |
| 271 | } | 272 | } |
| @@ -273,9 +274,9 @@ int nc_main(int argc, char **argv) | |||
| 273 | if (delay > 0) | 274 | if (delay > 0) |
| 274 | sleep(delay); | 275 | sleep(delay); |
| 275 | } | 276 | } |
| 276 | if (fdidx == 1) | 277 | if (fd == cfd) |
| 277 | break; | 278 | break; |
| 278 | fdidx++; | 279 | fd = cfd; |
| 279 | } | 280 | } |
| 280 | } | 281 | } |
| 281 | } | 282 | } |
