[8702] in Athena Bugs

home help back first fref pref prev next nref lref last post

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 */

home help back first fref pref prev next nref lref last post