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

  1 mike  1.2 //%/////////////////////////////////////////////////////////////////////////////
  2           //
  3 kumpf 1.4 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
  4 mike  1.2 // The Open Group, Tivoli Systems
  5           //
  6           // Permission is hereby granted, free of charge, to any person obtaining a copy
  7 kumpf 1.4 // of this software and associated documentation files (the "Software"), to
  8           // deal in the Software without restriction, including without limitation the
  9           // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 10 mike  1.2 // sell copies of the Software, and to permit persons to whom the Software is
 11           // furnished to do so, subject to the following conditions:
 12           // 
 13 kumpf 1.4 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 14 mike  1.2 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 15           // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 16 kumpf 1.4 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 17           // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 18           // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 19 mike  1.2 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 20           // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 21           //
 22           //==============================================================================
 23           //
 24           // Author: Mike Brasher (mbrasher@bmc.com)
 25           //
 26           // Modified By:
 27           //
 28           //%/////////////////////////////////////////////////////////////////////////////
 29           
 30           #include "Socket.h"
 31           
 32           #ifdef PEGASUS_OS_TYPE_WINDOWS
 33 tony  1.9 #include <windows.h>
 34           # ifndef _WINSOCKAPI_
 35           #   include <winsock2.h>
 36           # endif
 37 mike  1.2 #else
 38           # include <cctype>
 39 chuck 1.5 #ifndef PEGASUS_OS_OS400
 40           #   include <unistd.h>
 41           #else
 42           #   include <unistd.cleinc>
 43           #endif
 44 marek 1.7 #   include <string.h>  // added by rk for memcpy
 45 mike  1.2 # include <cstdlib>
 46           # include <errno.h>
 47           # include <fcntl.h>
 48           # include <netdb.h>
 49           # include <netinet/in.h>
 50           # include <arpa/inet.h>
 51           # include <sys/socket.h>
 52 mday  1.11 # include <errno.h>
 53 mike  1.2  #endif
 54            
 55 mday  1.11 #include <Pegasus/Common/Sharable.h>
 56 mike  1.2  PEGASUS_NAMESPACE_BEGIN
 57            
 58            static Uint32 _socketInterfaceRefCount = 0;
 59            
 60            Sint32 Socket::read(Sint32 socket, void* ptr, Uint32 size)
 61            {
 62            #ifdef PEGASUS_OS_TYPE_WINDOWS
 63                return ::recv(socket, (char*)ptr, size, 0);
 64            #else
 65 keith.petley 1.13 #if defined (__GNUC__) && !defined(PEGASUS_OS_SOLARIS)
 66 mday         1.11     int ccode = TEMP_FAILURE_RETRY(::read(socket, (char*)ptr, size));
 67                       return ccode;
 68                   #else 
 69 mike         1.2      return ::read(socket, (char*)ptr, size);
 70                   #endif
 71 mday         1.11 #endif
 72 mike         1.2  }
 73                   
 74                   Sint32 Socket::write(Sint32 socket, const void* ptr, Uint32 size)
 75                   {
 76                   #ifdef PEGASUS_OS_TYPE_WINDOWS
 77                       return ::send(socket, (const char*)ptr, size, 0);
 78                   #else
 79 keith.petley 1.13 #if (__GNUC__) && !defined(PEGASUS_OS_SOLARIS)
 80 mday         1.11     int ccode = TEMP_FAILURE_RETRY(::write(socket, (char*)ptr, size));
 81                       return ccode;
 82                   #else
 83 mike         1.2      return ::write(socket, (char*)ptr, size);
 84                   #endif
 85 mday         1.11 #endif
 86 mike         1.2  }
 87                   
 88                   void Socket::close(Sint32 socket)
 89                   {
 90                   #ifdef PEGASUS_OS_TYPE_WINDOWS
 91                       closesocket(socket);
 92                   #else
 93 keith.petley 1.13 #if (__GNUC__) && !defined(PEGASUS_OS_SOLARIS)
 94 mday         1.11     TEMP_FAILURE_RETRY(::close(socket));
 95                   #else
 96 mike         1.2      ::close(socket);
 97                   #endif
 98 mday         1.11 #endif
 99 mike         1.2  }
100                   
101 mday         1.11 int Socket::close2(Sint32 socket)
102                   {
103                   #ifdef PEGASUS_OS_TYPE_WINDOWS
104                       return closesocket(socket);
105                   #else
106 keith.petley 1.13 #if (__GNUC__) && !defined(PEGASUS_OS_SOLARIS)
107 mday         1.11     int ccode = TEMP_FAILURE_RETRY(::close(socket));
108                       return ccode;
109                   #else
110                       return ::close(socket);
111                   #endif
112                   #endif
113                   }
114                   
115                   
116 mike         1.2  void Socket::enableBlocking(Sint32 socket)
117                   {
118                   #ifdef PEGASUS_OS_TYPE_WINDOWS
119                       unsigned long flag = 0;
120                       ioctlsocket(socket, FIONBIO, &flag);
121                   #else
122                       int flags = fcntl(socket, F_GETFL, 0);
123                       flags &= ~O_NONBLOCK;
124                       fcntl(socket, F_SETFL, flags);
125                   #endif
126                   }
127                   
128 mday         1.11 int Socket::enableBlocking2(Sint32 socket)
129                   {
130                   #ifdef PEGASUS_OS_TYPE_WINDOWS
131                       unsigned long flag = 0;
132                       return ioctlsocket(socket, FIONBIO, &flag);
133                   #else
134                       int flags = fcntl(socket, F_GETFL, 0);
135                       flags &= ~O_NONBLOCK;
136                       return fcntl(socket, F_SETFL, flags);
137                   #endif
138                   }
139                   
140 mike         1.2  void Socket::disableBlocking(Sint32 socket)
141                   {
142                   #ifdef PEGASUS_OS_TYPE_WINDOWS
143                       unsigned long flag = 1;
144                       ioctlsocket(socket, FIONBIO, &flag);
145                   #else
146                       int flags = fcntl(socket, F_GETFL, 0);
147                       flags |= O_NONBLOCK;
148                       fcntl(socket, F_SETFL, flags);
149                   #endif
150                   }
151                   
152 mday         1.11 int Socket::disableBlocking2(Sint32 socket)
153                   {
154                   #ifdef PEGASUS_OS_TYPE_WINDOWS
155                       unsigned long flag = 1;
156                       return ioctlsocket(socket, FIONBIO, &flag);
157                   #else
158                       int flags = fcntl(socket, F_GETFL, 0);
159                       flags |= O_NONBLOCK;
160                       return fcntl(socket, F_SETFL, flags);
161                   #endif
162                   }
163                   
164 mike         1.2  void Socket::initializeInterface()
165                   {
166                   #ifdef PEGASUS_OS_TYPE_WINDOWS
167                       if (_socketInterfaceRefCount == 0)
168                       {
169                   	WSADATA tmp;
170                   
171                   	if (WSAStartup(0x202, &tmp) == SOCKET_ERROR)
172                   	    WSACleanup();
173                       }
174                   
175                       _socketInterfaceRefCount++;
176                   #endif
177                   }
178                   
179                   void Socket::uninitializeInterface()
180                   {
181                   #ifdef PEGASUS_OS_TYPE_WINDOWS
182                       _socketInterfaceRefCount--;
183                   
184                       if (_socketInterfaceRefCount == 0)
185 mike         1.2  	WSACleanup();
186                   #endif
187                   }
188                   
189 mday         1.11 
190 mike         1.2  PEGASUS_NAMESPACE_END
191 mday         1.11 

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2