[comp.windows.x] xscope patches

Richard.Draves@RPD.MACH.CS.CMU.EDU (11/30/88)

I ran into two problems compiling xscope for Mach.  4.3 may well have
these problems too.  Mach doesn't have SO_DONTLINGER.  The file scope.c
uses perror() before including <errno.h>.  The Mach <errno.h> has a
prototype declaration for perror() (when __STDC__) and the
implicit int declaration conflicts with the later void declaration.  I
briefly tested xscope on RTs, Vaxen, and Suns without seeing any problems.
It looks very useful.

Rich

*** common.c.~1~	Tue Nov 29 16:07:28 1988
--- common.c	Tue Nov 29 16:40:06 1988
***************
*** 148,153 ****
--- 148,156 ----
  {
    FD ConnectionSocket;
    struct sockaddr_in  sin;
+ #ifndef	SO_DONTLINGER
+   struct linger linger;
+ #endif	SO_DONTLINGER
  
    enterprocedure("SetUpConnectionSocket");
  
***************
*** 160,166 ****
--- 163,175 ----
      }
    (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_REUSEADDR,   (char *)NULL, 0);
    (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_USELOOPBACK, (char *)NULL, 0);
+ #ifdef	SO_DONTLINGER
    (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_DONTLINGER,  (char *)NULL, 0);
+ #else	SO_DONTLINGER
+   linger.l_onoff = 0;
+   linger.l_linger = 0;
+   (void)setsockopt(ConnectionSocket, SOL_SOCKET, SO_LINGER, (char *)&linger, sizeof linger);
+ #endif	SO_DONTLINGER
  
    /* define the name and port to be used with the connection socket */
    bzero((char *)&sin, sizeof(sin));
*** scope.c.~1~	Tue Nov 29 16:07:23 1988
--- scope.c	Tue Nov 29 17:00:49 1988
***************
*** 9,14 ****
--- 9,22 ----
  
  #include "scope.h"
  
+ #include <sys/types.h>	       /* needed by sys/socket.h and netinet/in.h */
+ #include <sys/uio.h>	       /* for struct iovec, used by socket.h */
+ #include <sys/socket.h>	       /* for AF_INET, SOCK_STREAM, ... */
+ #include <sys/ioctl.h>	       /* for FIONCLEX, FIONBIO, ... */
+ #include <netinet/in.h>	       /* struct sockaddr_in */
+ #include <netdb.h>	       /* struct servent * and struct hostent * */
+ #include <errno.h>	       /* for EINTR, EADDRINUSE, ... */
+ extern int  errno;
  
  /* ********************************************** */
  /*                                                */
***************
*** 458,472 ****
  /*								*/
  /* ************************************************************ */
  
- #include <sys/types.h>	       /* needed by sys/socket.h and netinet/in.h */
- #include <sys/uio.h>	       /* for struct iovec, used by socket.h */
- #include <sys/socket.h>	       /* for AF_INET, SOCK_STREAM, ... */
- #include <sys/ioctl.h>	       /* for FIONCLEX, FIONBIO, ... */
- #include <netinet/in.h>	       /* struct sockaddr_in */
- #include <netdb.h>	       /* struct servent * and struct hostent * */
- #include <errno.h>	       /* for EINTR, EADDRINUSE, ... */
- extern int  errno;
- 
  static int  ON = 1 /* used in ioctl */ ;
  
  NewConnection(fd)
--- 466,471 ----
***************
*** 527,532 ****
--- 526,534 ----
    FD ServerFD;
    struct sockaddr_in  sin;
    struct hostent *hp;
+ #ifndef	SO_DONTLINGER
+   struct linger linger;
+ #endif	SO_DONTLINGER
  
    enterprocedure("ConnectToServer");
  
***************
*** 541,547 ****
--- 543,555 ----
      }
    (void) setsockopt(ServerFD, SOL_SOCKET, SO_REUSEADDR,  (char *) NULL, 0);
    (void) setsockopt(ServerFD, SOL_SOCKET, SO_USELOOPBACK,(char *) NULL, 0);
+ #ifdef	SO_DONTLINGER
    (void) setsockopt(ServerFD, SOL_SOCKET, SO_DONTLINGER, (char *) NULL, 0);
+ #else	SO_DONTLINGER
+   linger.l_onoff = 0;
+   linger.l_linger = 0;
+   (void) setsockopt(ServerFD, SOL_SOCKET, SO_LINGER, (char *)&linger, sizeof linger);
+ #endif	SO_DONTLINGER
  
    /* determine the host machine for this process */
    if (ServerHostName[0] == '\0')