/*
* set up the various mode flags, NL endings and things
*/
-void setmode(char *m)
+void setconntype(char *m)
{
connsort = strlower(m);
if (eq(connsort, "telnet") || eq(connsort, "local") || eq(connsort, "nlonly")) {
die("Must have at least a callsign (for now)");
if (optind < argc) {
- setmode(argv[optind]);
+ setconntype(argv[optind]);
} else {
- setmode("local");
+ setconntype("local");
}
/* this is kludgy, but hey so is the rest of this! */
struct hostent *hp, *gethostbyname();
struct sockaddr_in server;
int nodef;
+ int one = 1;
sel_t *sp;
-
+ struct linger lg;
+
if ((hp = gethostbyname(node_addr)) == 0)
die("Unknown host tcp host %s for printer", node_addr);
if (connect(nodef, (struct sockaddr *) &server, sizeof server) < 0) {
die("Error on connect to %s port %d (%d)", node_addr, node_port, errno);
}
+
+ memset(&lg, 0, sizeof lg);
+ if (setsockopt(nodef, SOL_SOCKET, SO_LINGER, &lg, sizeof lg) < 0) {
+ die("Error on SO_LINGER to %s port %d (%d)", node_addr, node_port, errno);
+ }
+ if (setsockopt(nodef, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one) < 0) {
+ die("Error on SO_KEEPALIVE to %s port %d (%d)", node_addr, node_port, errno);
+ }
+
node = fcb_new(nodef, MSG);
node->sp = sel_open(nodef, node, "Msg System", fcb_handler, MSG, SEL_INPUT);
#ifdef SIGPWR
signal(SIGPWR, terminate);
#endif
-#ifdef SIGCLD
- signal(SIGCLD, reaper);
-#else
- #ifdef SIGCHILD
- signal(SIGCHILD, reaper);
- #endif
-#endif
/* init a few things */
chain_init(&echobase);