(file) Return to Socket.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/Socket.h between version 1.5.12.3 and 1.25

version 1.5.12.3, 2003/07/10 21:41:12 version 1.25, 2008/02/26 19:15:05
Line 1 
Line 1 
 //%///////////////////////-*-c++-*-/////////////////////////////////////////////  //%2006////////////////////////////////////////////////////////////////////////
 // //
 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,  // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
 // The Open Group, Tivoli Systems  // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation, The Open Group.
   // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; VERITAS Software Corporation; The Open Group.
   // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
   // EMC Corporation; Symantec Corporation; The Open Group.
 // //
 // Permission is hereby granted, free of charge, to any person obtaining a copy // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to // of this software and associated documentation files (the "Software"), to
Line 21 
Line 29 
 // //
 //============================================================================== //==============================================================================
 // //
 // Author: Mike Brasher (mbrasher@bmc.com)  
 //  
 // Modified By:  
 //  
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #ifndef Pegasus_Socket_h #ifndef Pegasus_Socket_h
 #define Pegasus_Socket_h #define Pegasus_Socket_h
  
 #include <Pegasus/Common/Config.h>  
 #include <Pegasus/Common/IPC.h>  
 #ifdef PEGASUS_OS_TYPE_WINDOWS  
 #include <windows.h>  
 # ifndef _WINSOCKAPI_  
 #   include <winsock2.h>  
 # endif  
 #else  
 # include <cctype> # include <cctype>
 #ifndef PEGASUS_OS_OS400  #include <Pegasus/Common/Network.h>
 #   include <unistd.h>  #include <Pegasus/Common/Config.h>
 #else  #include <Pegasus/Common/Linkage.h>
 #   include <Pegasus/Common/OS400ConvertChar.h>  
 #   include <unistd.cleinc>  
 #endif  
 #ifdef PEGASUS_OS_ZOS #ifdef PEGASUS_OS_ZOS
 #   include <string.h>  // added by rk for memcpy #   include <string.h>  // added by rk for memcpy
 #endif #endif
 # include <cstdlib>  
 # include <errno.h>  
 # include <fcntl.h>  
 # include <netdb.h>  
 # include <netinet/in.h>  
 # include <arpa/inet.h>  
 # include <sys/socket.h>  
 #endif  
 #include <Pegasus/Common/Linkage.h>  
  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 class PEGASUS_COMMON_LINKAGE Socket  class Socket
 { {
    public:    public:
  
       /**
           Connects the specified socket to the specified address.  If the socket
           is non-blocking, the connect attempt will time out after the specified
           interval.
   
           @param socket The socket to connect.
           @param address The address to which to connect the socket
           @param addressLength The length of the sockaddr buffer in which the
               address is specified.
           @param timeoutMilliseconds The number of milliseconds after which the
               connect attempt should time out, if the socket is non-blocking.
           @return True if the connect attempt is successful, false otherwise.
       */
       static Boolean timedConnect(
           SocketHandle socket,
           sockaddr* address,
           int addressLength,
           Uint32 timeoutMilliseconds);
   
       static Sint32 read(SocketHandle socket, void* ptr, Uint32 size);
   
       static Sint32 write(SocketHandle socket, const void* ptr, Uint32 size);
   
       static Sint32 timedWrite(SocketHandle socket,
                                const void* ptr,
                                Uint32 size,
                                Uint32 socketWriteTimeout);
   
       /**
           Closes a specified socket.  If successful, the socket handle is set to
           PEGASUS_INVALID_SOCKET.
           @param socket The SocketHandle to close.
       */
       static void close(SocketHandle& socket);
  
       static Sint32 read(Sint32 socket, void* ptr, Uint32 size);      static void disableBlocking(SocketHandle socket);
  
       static Sint32 write(Sint32 socket, const void* ptr, Uint32 size);      static void initializeInterface();
  
       static void close(Sint32 socket);      static void uninitializeInterface();
       static int close2(Sint32 socket);  
   
       static void enableBlocking(Sint32 socket);  
       static int  enableBlocking2(Sint32 socket);  
   
       static void disableBlocking(Sint32 socket);  
       static int disableBlocking2(Sint32 socket);  
   
       static void initializeInterface(void);  
       static void uninitializeInterface(void);  
  
       static SocketHandle createSocket(int domain, int type, int protocol);
  
    private:    private:
       Socket();
       Socket() { }  
 }; };
  
   // Use with AutoPtr to automatically close a socket on error
   struct CloseSocketHandle
   
   
   
 //  <<< Thu Jul  3 13:50:29 2003 mdd >>> pep_88  
 /*****************************************************************  
  *  
  *  The socket support in pegasus is schizophrenic. Some code uses  
  *  an Sint32 (fd) as a socket, while other code uses a pointer to an  
  *  MP_Socket, which is kind of a container for either an Sint32 socket  
  *  or an SSL socket.  
  *  
  *  Then there is also the local socket. (AF_UNIX).  
  *  
  *  What we need to make all of this coherent is a general-purpose  
  *  socket class that uses polymorphism to provide a good sockets  
  *  interface.  
  *  Because of what we are planning for the pep_88 connection management  
  *  code this general-purpose socket class should be reference counted.  
  *  
  *****************************************************************/  
   
 class abstract_socket;  
 class socket_factory;  
   
   
 class PEGASUS_COMMON_LINKAGE pegasus_socket  
 { {
       void operator()(SocketHandle* ptr)
    public:      {
       pegasus_socket(void);          if (ptr)
       pegasus_socket(socket_factory *);          {
       pegasus_socket(abstract_socket *);              Socket::close(*ptr);
       pegasus_socket(const pegasus_socket& s);          }
       ~pegasus_socket(void);      }
   
       pegasus_socket& operator=(const pegasus_socket& s);  
       operator Sint32() const;  
   
       int socket(int type, int style, int protocol);  
       int socket(int type, int style, int protocol, void *ssl_context = 0);  
   
       Sint32 read(void* ptr, Uint32 size);  
       Sint32 write(const void* ptr, Uint32 size);  
       int close(void);  
       int enableBlocking(void);  
       int disableBlocking(void);  
   
       int getsockname (struct sockaddr *addr, size_t *length_ptr);  
       int bind (struct sockaddr *addr, size_t length);  
   
       // change size_t to size_t for ZOS and windows  
       pegasus_socket accept(struct sockaddr *addr, size_t *length_ptr);  
       int connect (struct sockaddr *addr, size_t length);  
       int shutdown(int how);  
       int listen(int q);  
       int getpeername (struct sockaddr *addr, size_t *length_ptr);  
       int send (void *buffer, size_t size, int flags);  
       int recv (void *buffer, size_t size, int flags);  
       int sendto(void *buffer, size_t size, int flags, struct sockaddr *addr, size_t length);  
       int recvfrom(void *buffer, size_t size, int flags, struct sockaddr *addr, size_t *length_ptr);  
       int setsockopt (int level, int optname, void *optval, size_t optlen);  
       int getsockopt (int level, int optname, void *optval, size_t *optlen_ptr);  
   
   
       Boolean incompleteReadOccurred(Sint32 retCode);  
       Boolean is_secure(void);  
       void set_close_on_exec(void);  
   
       const char* get_err_string(void);  
   
    private:  
   
       abstract_socket * _rep;  
   
 }; };
  
   
   
   
   
   
   
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END
  
 #endif /* Pegasus_Socket_h */ #endif /* Pegasus_Socket_h */


Legend:
Removed from v.1.5.12.3  
changed lines
  Added in v.1.25

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2