I was reading a little about T/TCP in Steven's book, and it occured
to me that some of inetd's small services would be ideal candidates
for T/TCP. (auth, time and daytime in particular).

According to Stevens, the main thing you need to do to make a server
T/TCP firendly is use the MSG_EOF flag when you send the last block
of data to that socket. For each of these services, which only
write a single block of data, this involves just changing:

        write(s, buf, len);

to:

        send(s, buf, len, MSG_EOF);

I've tried this over my slip link and it does seem to reduce the
number of packets sent by 2 for telnetting to the daytime port. I
also had a look at fetch (the only thing in the tree which uses
MSG_EOF at the moment), which has an option for turning off the
MSG_EOF stuff 'cos some buggy http servers don't like half closed
connections. I don't think this applies in this case 'cos we're
on the server side - not the client side, and the client expects
an EOF anyway.

Would this be an acceptable patch to inetd? It would be nice to
encourage the use of T/TCP within FreeBSD, as we seem to be the
only people who have it ;-)

        David.

--- builtins.c  2000/03/11 11:28:07     1.19
+++ builtins.c  2000/03/16 21:20:02
@@ -219,7 +219,7 @@
        clock = time((time_t *) 0);
 
        (void) sprintf(buffer, "%.24s\r\n", ctime(&clock));
-       (void) write(s, buffer, strlen(buffer));
+       (void) send(s, buffer, strlen(buffer), MSG_EOF);
 }
 
 /*
@@ -320,7 +320,7 @@
                syslog(LOG_ERR, "asprintf: %m");
                exit(EX_OSERR);
        }
-       write(s, p, strlen(p));
+       send(s, p, strlen(p), MSG_EOF);
        free(p);
 
        exit(0);
@@ -602,7 +602,7 @@
                syslog(LOG_ERR, "asprintf: %m");
                exit(EX_OSERR);
        }
-       write(s, p, strlen(p));
+       send(s, p, strlen(p), MSG_EOF);
        free(p);
        
        exit(0);
@@ -664,7 +664,7 @@
        unsigned long result;
 
        result = machtime();
-       (void) write(s, (char *) &result, sizeof(result));
+       (void) send(s, (char *) &result, sizeof(result), MSG_EOF);
 }
 
 /*


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to