[8702] in Athena Bugs
talk.old
daemon@ATHENA.MIT.EDU (John Carr)
Mon Dec 2 20:21:16 1991
To: bugs@Athena.MIT.EDU
Date: Mon, 02 Dec 91 20:21:04 EST
From: John Carr <jfc@Athena.MIT.EDU>
This patch to talk.old makes talk return an error immediately when the
target machine doesn't run an old talk server, instead of trying
forever to connect.
*** ctl_transact.c~ Fri Aug 12 17:28:02 1988
--- ctl_transact.c Mon Dec 2 20:17:20 1991
***************
*** 37,42 ****
--- 37,49 ----
daemon_addr.sin_port = daemon_port;
ctl_mask = 1 << ctl_sockt;
+ if (connect(ctl_sockt, (struct sockaddr *)&daemon_addr,
+ sizeof(daemon_addr)) == -1)
+ {
+ p_error("connecting to talk daemon");
+ response->answer = MACHINE_UNKNOWN;
+ }
+
/*
* keep sending the message until a response of the right
* type is obtained
***************
*** 47,58 ****
/* keep sending the message until a response is obtained */
do {
! cc = sendto(ctl_sockt, (char *)&msg, sizeof(CTL_MSG), 0,
! &daemon_addr, sizeof(daemon_addr));
if (cc != sizeof(CTL_MSG)) {
if (errno == EINTR)
continue;
p_error("Error on write to talk daemon");
}
read_mask = ctl_mask;
if ((nready = select(32, &read_mask, 0, 0, &wait)) < 0) {
--- 54,66 ----
/* keep sending the message until a response is obtained */
do {
! cc = send(ctl_sockt, (char *)&msg, sizeof(CTL_MSG), 0);
if (cc != sizeof(CTL_MSG)) {
if (errno == EINTR)
continue;
p_error("Error on write to talk daemon");
+ response->answer = MACHINE_UNKNOWN;
+ return;
}
read_mask = ctl_mask;
if ((nready = select(32, &read_mask, 0, 0, &wait)) < 0) {
***************
*** 59,64 ****
--- 67,74 ----
if (errno == EINTR)
continue;
p_error("Error waiting for daemon response");
+ response->answer = MACHINE_UNKNOWN;
+ return;
}
} while (nready == 0);
/* keep reading while there are queued messages
***************
*** 67,78 ****
*/
do {
junk_size = sizeof(junk);
! cc = recvfrom(ctl_sockt, (char *)response,
! sizeof (CTL_RESPONSE), 0, &junk, &junk_size);
if (cc < 0) {
if (errno == EINTR)
continue;
p_error("Error on read from talk daemon");
}
read_mask = ctl_mask;
/* an immediate poll */
--- 77,90 ----
*/
do {
junk_size = sizeof(junk);
! cc = recv(ctl_sockt, (char *)response,
! sizeof (CTL_RESPONSE), 0);
if (cc < 0) {
if (errno == EINTR)
continue;
p_error("Error on read from talk daemon");
+ response->answer = MACHINE_UNKNOWN;
+ return;
}
read_mask = ctl_mask;
/* an immediate poll */