Skip to content

Commit 037b07a

Browse files
committed
Make all server unlisten when then they finish.
1 parent 63a7127 commit 037b07a

File tree

6 files changed

+92
-34
lines changed

6 files changed

+92
-34
lines changed

apps/discard.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,21 @@ static void discard_server (int sock)
2222

2323
for (;;) {
2424
size = sizeof buffer;
25-
if (ncp_read (connection, buffer, &size) == -1)
25+
if (ncp_read (connection, buffer, &size) == -1) {
2626
fprintf (stderr, "NCP read error.\n");
27-
if (size <= 0)
28-
return;
27+
if (ncp_close (connection) == -1)
28+
fprintf (stderr, "NCP close error.\n");
29+
break;
30+
}
31+
if (size == 0)
32+
break;
2933
fprintf (stderr, "Read %d octets.\n", size);
3034
}
35+
36+
if (ncp_unlisten (sock) == -1) {
37+
fprintf (stderr, "NCP unlisten error.\n");
38+
exit (1);
39+
}
3140
}
3241

3342
static void usage (const char *argv0)

apps/echo.c

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,37 +29,45 @@ static void echo_client (int host, int sock)
2929

3030
for (;;) {
3131
size = read (0, buffer, sizeof buffer);
32-
if (size == -1)
32+
if (size < 0)
3333
fprintf (stderr, "Read error.\n");
34-
if (size <= 0)
35-
goto end;
34+
if (size <= 0) {
35+
if (ncp_close (connection) == -1)
36+
fprintf (stderr, "NCP close error.\n");
37+
return;
38+
}
3639
for (ptr = buffer; size > 0; ptr += n, size -= n) {
3740
n = size;
38-
if (ncp_write (connection, ptr, &n) == -1)
41+
if (ncp_write (connection, ptr, &n) == -1) {
3942
fprintf (stderr, "NCP read error.\n");
40-
if (n <= 0)
41-
goto end;
43+
if (ncp_close (connection) == -1)
44+
fprintf (stderr, "NCP close error.\n");
45+
return;
46+
}
47+
if (n == 0)
48+
return;
4249
}
4350

4451
n = sizeof buffer;
45-
if (ncp_read (connection, buffer, &n) == -1)
52+
if (ncp_read (connection, buffer, &n) == -1) {
4653
fprintf (stderr, "NCP read error.\n");
47-
if (n <= 0)
48-
goto end;
54+
if (ncp_close (connection) == -1)
55+
fprintf (stderr, "NCP close error.\n");
56+
return;
57+
}
58+
if (n == 0)
59+
return;
4960
for (ptr = buffer; n > 0; n -= size) {
5061
size = write (1, ptr, n);
51-
if (size < 0)
62+
if (size < 0) {
5263
fprintf (stderr, "Write error.\n");
64+
if (ncp_close (connection) == -1)
65+
fprintf (stderr, "NCP close error.\n");
66+
}
5367
if (size <= 0)
54-
goto end;
68+
return;
5569
}
5670
}
57-
58-
end:
59-
if (ncp_close (connection) == -1) {
60-
fprintf (stderr, "NCP close error.\n");
61-
exit (1);
62-
}
6371
}
6472

6573
static void echo_server (int sock)
@@ -76,18 +84,32 @@ static void echo_server (int sock)
7684

7785
for (;;) {
7886
size = sizeof buffer;
79-
if (ncp_read (connection, buffer, &size) == -1)
87+
if (ncp_read (connection, buffer, &size) == -1) {
8088
fprintf (stderr, "NCP read error.\n");
81-
if (size <= 0)
82-
return;
89+
if (ncp_close (connection) == -1)
90+
fprintf (stderr, "NCP close error.\n");
91+
goto end;
92+
}
93+
if (size == 0)
94+
goto end;
8395
for (ptr = buffer; size > 0; ptr += n, size -= n) {
8496
n = size;
85-
if (ncp_write (connection, ptr, &n) == -1)
97+
if (ncp_write (connection, ptr, &n) == -1) {
8698
fprintf (stderr, "NCP read error.\n");
87-
if (n <= 0)
88-
return;
99+
if (ncp_close (connection) == -1)
100+
fprintf (stderr, "NCP close error.\n");
101+
goto end;
102+
}
103+
if (n == 0)
104+
goto end;
89105
}
90106
}
107+
108+
end:
109+
if (ncp_unlisten (sock) == -1) {
110+
fprintf (stderr, "NCP unlisten error.\n");
111+
exit (1);
112+
}
91113
}
92114

93115
static void usage (const char *argv0)

apps/finger.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,24 @@ int main (int argc, char **argv)
4646
argc == 3 ? argv[2] : "");
4747
if (ncp_write (connection, command, &size) == -1) {
4848
fprintf (stderr, "NCP write error.\n");
49+
if (ncp_close (connection) == -1)
50+
fprintf (stderr, "NCP close error.\n");
51+
exit (1);
52+
}
53+
if (size == 0) {
54+
fprintf (stderr, "Connection closed.\n");
4955
exit (1);
5056
}
5157

5258
size = sizeof reply;
5359
if (ncp_read (connection, reply, &size) == -1) {
5460
fprintf (stderr, "NCP read error.\n");
61+
if (ncp_close (connection) == -1)
62+
fprintf (stderr, "NCP close error.\n");
5563
exit (1);
5664
}
65+
if (size == 0)
66+
exit (0);
5767

5868
write (1, reply, size);
5969

apps/finser.c

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
#include <string.h>
66
#include "ncp.h"
77

8+
#define SOCKET 0117
9+
810
int main (int argc, char **argv)
911
{
1012
char command[1000];
@@ -26,30 +28,39 @@ int main (int argc, char **argv)
2628
}
2729

2830
size = 8;
29-
if (ncp_listen (0117, &size, &host, &connection) == -1) {
31+
if (ncp_listen (SOCKET, &size, &host, &connection) == -1) {
3032
fprintf (stderr, "NCP listen error.\n");
3133
exit (1);
3234
}
3335

3436
size = sizeof command;
3537
if (ncp_read (connection, command, &size) == -1) {
3638
fprintf (stderr, "NCP read error.\n");
37-
exit (1);
39+
if (ncp_close (connection) == -1)
40+
fprintf (stderr, "NCP close error.\n");
41+
goto unlisten;
42+
}
43+
if (size == 0) {
44+
fprintf (stderr, "Connection closed.\n");
45+
goto unlisten;
3846
}
3947
command[size] = 0;
4048

4149
snprintf (reply, sizeof reply - 1,
4250
"Sample response from Finger server.\r\n"
4351
"Data from client was: \"%s\".\r\n", command);
4452
size = strlen (reply);
45-
if (ncp_write (connection, reply, &size) == -1) {
53+
if (ncp_write (connection, reply, &size) == -1)
4654
fprintf (stderr, "NCP write error.\n");
47-
exit (1);
48-
}
4955

50-
if (ncp_close (connection) == -1) {
56+
if (size != 0 && ncp_close (connection) == -1)
5157
fprintf (stderr, "NCP close error.\n");
58+
59+
unlisten:
60+
if (ncp_unlisten (SOCKET) == -1) {
61+
fprintf (stderr, "NCP unlisten error.\n");
5262
exit (1);
5363
}
5464

65+
return 0;
5566
}

apps/gateway.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,11 @@ static void ncp_to_tcp (int sock, const char *host, const char *port)
183183
fd = inet_connect (host, port);
184184
transport (fd, connection);
185185

186-
if (ncp_close (connection) == -1) {
186+
if (ncp_close (connection) == -1)
187187
fprintf (stderr, "NCP close error.\n");
188+
189+
if (ncp_unlisten (sock) == -1) {
190+
fprintf (stderr, "NCP unlisten error.\n");
188191
exit (1);
189192
}
190193
}

apps/telnet.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -456,8 +456,11 @@ static void telnet_server (int host, int sock,
456456
kill (reader_pid, SIGTERM);
457457
kill (writer_pid, SIGTERM);
458458

459-
if (ncp_close (connection) == -1) {
459+
if (ncp_close (connection) == -1)
460460
fprintf (stderr, "NCP close error.\n");
461+
462+
if (ncp_unlisten (sock) == -1) {
463+
fprintf (stderr, "NCP unlisten error.\n");
461464
exit (1);
462465
}
463466
}

0 commit comments

Comments
 (0)