* Let the reader beware.
*
* $Log$
- * Revision 1.11 1987-07-29 16:04:54 wesommer
- * Add keepalive feature.
+ * Revision 1.13 1987-08-04 02:40:30 wesommer
+ * Do end run around minor hotspot.
*
+ * Revision 1.12 87/08/04 01:50:00 wesommer
+ * Rearranged messages.
+ *
+ * Revision 1.11 87/07/29 16:04:54 wesommer
+ * Add keepalive feature.
+ *
* Revision 1.10 87/06/30 20:02:26 wesommer
* Added returned tuple chain to client structure.
* Added local realm global variable.
extern char *malloc();
+extern int free();
extern char *inet_ntoa();
extern void sms_com_err();
extern void do_client();
init_sms_err_tbl();
init_krb_err_tbl();
set_com_err_hook(sms_com_err);
-
+ setlinebuf(stderr);
+
if (argc != 1) {
com_err(whoami, 0, "Usage: smsd");
exit(1);
}
+
+ /* Profiling implies that getting rid of one level of call
+ * indirection here wins us maybe 1% on the VAX.
+ */
+ gdb_amv = malloc;
+ gdb_fmv = free;
/*
* GDB initialization.
op_list = create_list_of_operations(1, listenop);
- (void) sprintf(buf1, "started (pid %d)", getpid());
- com_err(whoami, 0, buf1);
+ com_err(whoami, 0, "started (pid %d)", getpid());
com_err(whoami, 0, rcsid_sms_main_c);
/*
#ifdef notdef
fprintf(stderr, " tick\n");
#endif notdef
+ /*
+ * Handle any new connections; this comes first so
+ * errno isn't tromped on.
+ */
+ if (OP_DONE(listenop)) {
+ if (OP_STATUS(listenop) == OP_CANCELLED) {
+ if (errno == EWOULDBLOCK) {
+ do_reset_listen();
+ } else {
+ com_err(whoami, errno,
+ "error on listen");
+ exit(1);
+ }
+ } else if ((status = new_connection()) != 0) {
+ com_err(whoami, errno,
+ "Error on listening operation.");
+ /*
+ * Sleep here to prevent hosing?
+ */
+ }
+ }
/*
* Handle any existing connections.
*/
cur_client = NULL;
if (takedown) break;
}
- /*
- * Handle any new connections.
- */
- if (OP_DONE(listenop)) {
- if (OP_STATUS(listenop) == OP_CANCELLED) {
- com_err(whoami, errno, "Error on listen");
- exit(1);
-
- } else if ((status = new_connection()) != 0) {
- com_err(whoami, errno,
- "Error on listening operation.");
- /*
- * Sleep here to prevent hosing?
- */
- }
- }
}
- com_err(whoami, 0, takedown);
+ com_err(whoami, 0, "%s", takedown);
sms_close_database();
return 0;
}
return 0;
}
+
+do_reset_listen()
+{
+ client_addrlen = sizeof(client_addr);
+ start_accepting_client(listencon, listenop, &newconn,
+ (char *)&client_addr,
+ &client_addrlen, &client_tuple);
+}
+
/*
* This routine is called when a new connection comes in.
*
* Log new connection.
*/
- (void) sprintf(buf1,
- "New connection from %s port %d (now %d client%s)",
- inet_ntoa(cp->haddr.sin_addr),
- (int)ntohs(cp->haddr.sin_port),
- nclients,
- nclients!=1?"s":"");
- com_err(whoami, 0, buf1);
+ com_err(whoami, 0, "New connection from %s port %d (now %d client%s)",
+ inet_ntoa(cp->haddr.sin_addr),
+ (int)ntohs(cp->haddr.sin_port),
+ nclients,
+ nclients!=1?"s":"");
/*
* Get ready to accept the next connection.