aboutsummaryrefslogtreecommitdiff
path: root/networking/nc.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--networking/nc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/networking/nc.c b/networking/nc.c
index ab1316339..ee008595d 100644
--- a/networking/nc.c
+++ b/networking/nc.c
@@ -30,7 +30,7 @@
30//config:config NC_EXTRA 30//config:config NC_EXTRA
31//config: bool "Netcat extensions (-eiw and -f FILE)" 31//config: bool "Netcat extensions (-eiw and -f FILE)"
32//config: default y 32//config: default y
33//config: depends on NC || NETCAT 33//config: depends on (NC || NETCAT) && PLATFORM_POSIX
34//config: help 34//config: help
35//config: Add -e (support for executing the rest of the command line after 35//config: Add -e (support for executing the rest of the command line after
36//config: making or receiving a successful connection), -i (delay interval for 36//config: making or receiving a successful connection), -i (delay interval for
@@ -110,10 +110,12 @@
110 * when compared to "standard" nc 110 * when compared to "standard" nc
111 */ 111 */
112 112
113#if !ENABLE_PLATFORM_MINGW32
113static void timeout(int signum UNUSED_PARAM) 114static void timeout(int signum UNUSED_PARAM)
114{ 115{
115 bb_simple_error_msg_and_die("timed out"); 116 bb_simple_error_msg_and_die("timed out");
116} 117}
118#endif
117 119
118int nc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 120int nc_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
119int nc_main(int argc, char **argv) 121int nc_main(int argc, char **argv)
@@ -123,7 +125,9 @@ int nc_main(int argc, char **argv)
123 int cfd = 0; 125 int cfd = 0;
124 unsigned lport = 0; 126 unsigned lport = 0;
125 IF_NOT_NC_SERVER(const) unsigned do_listen = 0; 127 IF_NOT_NC_SERVER(const) unsigned do_listen = 0;
128#if !ENABLE_PLATFORM_MINGW32
126 IF_NOT_NC_EXTRA (const) unsigned wsecs = 0; 129 IF_NOT_NC_EXTRA (const) unsigned wsecs = 0;
130#endif
127 IF_NOT_NC_EXTRA (const) unsigned delay = 0; 131 IF_NOT_NC_EXTRA (const) unsigned delay = 0;
128 IF_NOT_NC_EXTRA (const int execparam = 0;) 132 IF_NOT_NC_EXTRA (const int execparam = 0;)
129 IF_NC_EXTRA (char **execparam = NULL;) 133 IF_NC_EXTRA (char **execparam = NULL;)
@@ -187,10 +191,12 @@ int nc_main(int argc, char **argv)
187 argv++; 191 argv++;
188 } 192 }
189 193
194#if !ENABLE_PLATFORM_MINGW32
190 if (wsecs) { 195 if (wsecs) {
191 signal(SIGALRM, timeout); 196 signal(SIGALRM, timeout);
192 alarm(wsecs); 197 alarm(wsecs);
193 } 198 }
199#endif
194 200
195 if (!cfd) { 201 if (!cfd) {
196 if (do_listen) { 202 if (do_listen) {
@@ -208,7 +214,7 @@ int nc_main(int argc, char **argv)
208 } 214 }
209#endif 215#endif
210 close_on_exec_on(sfd); 216 close_on_exec_on(sfd);
211 accept_again: 217 IF_NOT_PLATFORM_MINGW32(accept_again:)
212 cfd = accept(sfd, NULL, 0); 218 cfd = accept(sfd, NULL, 0);
213 if (cfd < 0) 219 if (cfd < 0)
214 bb_simple_perror_msg_and_die("accept"); 220 bb_simple_perror_msg_and_die("accept");
@@ -220,6 +226,7 @@ int nc_main(int argc, char **argv)
220 } 226 }
221 } 227 }
222 228
229#if !ENABLE_PLATFORM_MINGW32
223 if (wsecs) { 230 if (wsecs) {
224 alarm(0); 231 alarm(0);
225 /* Non-ignored signals revert to SIG_DFL on exec anyway */ 232 /* Non-ignored signals revert to SIG_DFL on exec anyway */
@@ -244,6 +251,7 @@ int nc_main(int argc, char **argv)
244 IF_NC_EXTRA(BB_EXECVP(execparam[0], execparam);) 251 IF_NC_EXTRA(BB_EXECVP(execparam[0], execparam);)
245 IF_NC_EXTRA(bb_perror_msg_and_die("can't execute '%s'", execparam[0]);) 252 IF_NC_EXTRA(bb_perror_msg_and_die("can't execute '%s'", execparam[0]);)
246 } 253 }
254#endif
247 255
248 /* loop copying stdin to cfd, and cfd to stdout */ 256 /* loop copying stdin to cfd, and cfd to stdout */
249 257