Avoid a warning.
[openssl.git] / apps / s_socket.c
index 9110234ed2096f344243ee9fb32276f3d40d0f4c..081b1a57d1745d7e0e57748b185ac75eac565405 100644 (file)
@@ -1,4 +1,4 @@
-/* apps/s_socket.c */
+/* apps/s_socket.c -  socket-related functions used by s_client and s_server */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
 #include <string.h>
 #include <errno.h>
 #include <signal.h>
+
+/* With IPv6, it looks like Digital has mixed up the proper order of
+   recursive header file inclusion, resulting in the compiler complaining
+   that u_int isn't defined, but only if _POSIX_C_SOURCE is defined, which
+   is needed to have fileno() declared correctly...  So let's define u_int */
+#if defined(VMS) && defined(__DECC) && !defined(__U_INT)
+#define __U_INT
+typedef unsigned int u_int;
+#endif
+
 #define USE_SOCKETS
 #define NON_MAIN
 #include "apps.h"
 #include "s_apps.h"
 #include <openssl/ssl.h>
 
-#ifndef NOPROTO
 static struct hostent *GetHostByName(char *name);
-int sock_init(void );
-#else
-static struct hostent *GetHostByName();
-int sock_init();
+#ifdef WINDOWS
+static void sock_cleanup(void);
 #endif
+static int sock_init(void);
+static int init_client_ip(int *sock,unsigned char ip[4], int port);
+static int init_server(int *sock, int port);
+static int init_server_long(int *sock, int port,char *ip);
+static int do_accept(int acc_sock, int *sock, char **host);
+static int host_ip(char *str, unsigned char ip[4]);
 
 #ifdef WIN16
 #define SOCKET_PROTOCOL        0 /* more microsoft stupidity */
@@ -119,19 +132,19 @@ static BOOL CALLBACK enumproc(HWND hwnd,LPARAM lParam)
 #endif /* WIN32 */
 #endif /* WINDOWS */
 
-void sock_cleanup(void)
-       {
 #ifdef WINDOWS
+static void sock_cleanup(void)
+       {
        if (wsa_init_done)
                {
                wsa_init_done=0;
                WSACancelBlockingCall();
                WSACleanup();
                }
-#endif
        }
+#endif
 
-int sock_init(void)
+static int sock_init(void)
        {
 #ifdef WINDOWS
        if (!wsa_init_done)
@@ -175,7 +188,7 @@ int init_client(int *sock, char *host, int port)
        return(init_client_ip(sock,ip,port));
        }
 
-int init_client_ip(int *sock, unsigned char ip[4], int port)
+static int init_client_ip(int *sock, unsigned char ip[4], int port)
        {
        unsigned long addr;
        struct sockaddr_in them;
@@ -206,68 +219,6 @@ int init_client_ip(int *sock, unsigned char ip[4], int port)
        return(1);
        }
 
-int nbio_sock_error(int sock)
-       {
-       int j,i;
-       int size;
-
-       size=sizeof(int);
-       i=getsockopt(sock,SOL_SOCKET,SO_ERROR,(char *)&j,&size);
-       if (i < 0)
-               return(1);
-       else
-               return(j);
-       }
-
-int nbio_init_client_ip(int *sock, unsigned char ip[4], int port)
-       {
-       unsigned long addr;
-       struct sockaddr_in them;
-       int s,i;
-
-       if (!sock_init()) return(0);
-
-       memset((char *)&them,0,sizeof(them));
-       them.sin_family=AF_INET;
-       them.sin_port=htons((unsigned short)port);
-       addr=   (unsigned long)
-               ((unsigned long)ip[0]<<24L)|
-               ((unsigned long)ip[1]<<16L)|
-               ((unsigned long)ip[2]<< 8L)|
-               ((unsigned long)ip[3]);
-       them.sin_addr.s_addr=htonl(addr);
-
-       if (*sock <= 0)
-               {
-               unsigned long l=1;
-
-               s=socket(AF_INET,SOCK_STREAM,SOCKET_PROTOCOL);
-               if (s == INVALID_SOCKET) { perror("socket"); return(0); }
-
-               i=0;
-               i=setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(char *)&i,sizeof(i));
-               if (i < 0) { perror("keepalive"); return(0); }
-               *sock=s;
-
-#ifdef FIONBIO
-               BIO_socket_ioctl(s,FIONBIO,&l);
-#endif
-               }
-       else
-               s= *sock;
-
-       i=connect(s,(struct sockaddr *)&them,sizeof(them));
-       if (i == INVALID_SOCKET)
-               {
-               if (BIO_sock_should_retry(i))
-                       return(-1);
-               else
-                       return(0);
-               }
-       else
-               return(1);
-       }
-
 int do_server(int port, int *ret, int (*cb)(), char *context)
        {
        int sock;
@@ -300,7 +251,7 @@ int do_server(int port, int *ret, int (*cb)(), char *context)
                }
        }
 
-int init_server_long(int *sock, int port, char *ip)
+static int init_server_long(int *sock, int port, char *ip)
        {
        int ret=0;
        struct sockaddr_in server;
@@ -327,7 +278,7 @@ int init_server_long(int *sock, int port, char *ip)
                {
                int j = 1;
                setsockopt(s, SOL_SOCKET, SO_REUSEADDR,
-                          (const void *) &j, sizeof j);
+                          (void *) &j, sizeof j);
                }
 #endif
        if (bind(s,(struct sockaddr *)&server,sizeof(server)) == -1)
@@ -350,12 +301,12 @@ err:
        return(ret);
        }
 
-int init_server(int *sock, int port)
+static int init_server(int *sock, int port)
        {
        return(init_server_long(sock, port, NULL));
        }
 
-int do_accept(int acc_sock, int *sock, char **host)
+static int do_accept(int acc_sock, int *sock, char **host)
        {
        int ret,i;
        struct hostent *h1,*h2;
@@ -371,7 +322,12 @@ redoit:
 
        memset((char *)&from,0,sizeof(from));
        len=sizeof(from);
-       ret=accept(acc_sock,(struct sockaddr *)&from,&len);
+       /* Note: under VMS with SOCKETSHR the fourth parameter is currently
+        * of type (int *) whereas under other systems it is (void *) if
+        * you don't have a cast it will choke the compiler: if you do
+        * have a cast then you can either go for (int *) or (void *).
+        */
+       ret=accept(acc_sock,(struct sockaddr *)&from,(void *)&len);
        if (ret == INVALID_SOCKET)
                {
 #ifdef WINDOWS
@@ -466,12 +422,12 @@ err:
        return(0);
        }
 
-int host_ip(char *str, unsigned char ip[4])
+static int host_ip(char *str, unsigned char ip[4])
        {
        unsigned int in[4]; 
        int i;
 
-       if (sscanf(str,"%d.%d.%d.%d",&(in[0]),&(in[1]),&(in[2]),&(in[3])) == 4)
+       if (sscanf(str,"%u.%u.%u.%u",&(in[0]),&(in[1]),&(in[2]),&(in[3])) == 4)
                {
                for (i=0; i<4; i++)
                        if (in[i] > 255)
@@ -582,65 +538,3 @@ static struct hostent *GetHostByName(char *name)
                return(ret);
                }
        }
-
-#ifndef MSDOS
-int spawn(int argc, char **argv, int *in, int *out)
-       {
-       int pid;
-#define CHILD_READ     p1[0]
-#define CHILD_WRITE    p2[1]
-#define PARENT_READ    p2[0]
-#define PARENT_WRITE   p1[1]
-       int p1[2],p2[2];
-
-       if ((pipe(p1) < 0) || (pipe(p2) < 0)) return(-1);
-
-       if ((pid=fork()) == 0)
-               { /* child */
-               if (dup2(CHILD_WRITE,fileno(stdout)) < 0)
-                       perror("dup2");
-               if (dup2(CHILD_WRITE,fileno(stderr)) < 0)
-                       perror("dup2");
-               if (dup2(CHILD_READ,fileno(stdin)) < 0)
-                       perror("dup2");
-               close(CHILD_READ); 
-               close(CHILD_WRITE);
-
-               close(PARENT_READ);
-               close(PARENT_WRITE);
-               execvp(argv[0],argv);
-               perror("child");
-               exit(1);
-               }
-
-       /* parent */
-       *in= PARENT_READ;
-       *out=PARENT_WRITE;
-       close(CHILD_READ);
-       close(CHILD_WRITE);
-       return(pid);
-       }
-#endif /* MSDOS */
-
-
-#ifdef undef
-       /* Turn on synchronous sockets so that we can do a WaitForMultipleObjects
-        * on sockets */
-       {
-       SOCKET s;
-       int optionValue = SO_SYNCHRONOUS_NONALERT;
-       int err;
-
-       err = setsockopt( 
-           INVALID_SOCKET, 
-           SOL_SOCKET, 
-           SO_OPENTYPE, 
-           (char *)&optionValue, 
-           sizeof(optionValue));
-       if (err != NO_ERROR) {
-       /* failed for some reason... */
-               BIO_printf(bio_err, "failed to setsockopt(SO_OPENTYPE, SO_SYNCHRONOUS_ALERT) - %d\n",
-                       WSAGetLastError());
-               }
-       }
-#endif