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

Diff for /pegasus/src/Pegasus/Common/Socket.cpp between version 1.22 and 1.23

version 1.22, 2006/01/30 16:17:07 version 1.23, 2006/06/26 22:23:29
Line 37 
Line 37 
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include "Socket.h" #include "Socket.h"
   #include "Network.h"
   #include <cctype>
   #include <cstring>
   #include <Pegasus/Common/Sharable.h>
   
   //------------------------------------------------------------------------------
   //
   // PEGASUS_RETRY_SYSTEM_CALL()
   //
   //     This macro repeats the given system call until it returns something
   //     other than EINTR.
   //
   //------------------------------------------------------------------------------
  
 #ifdef PEGASUS_OS_TYPE_WINDOWS #ifdef PEGASUS_OS_TYPE_WINDOWS
 #include <windows.h>  #   define PEGASUS_RETRY_SYSTEM_CALL(EXPR, RESULT) RESULT = EXPR
 # ifndef _WINSOCKAPI_  
 #   include <winsock2.h>  
 # endif  
 #else #else
 # include <cctype>  #   define PEGASUS_RETRY_SYSTEM_CALL(EXPR, RESULT) \
 #ifndef PEGASUS_OS_OS400          while (((RESULT = (EXPR)) == -1) && (errno == EINTR))
 #   include <unistd.h>  
 #else  
 #   include <unistd.cleinc>  
 #endif  
 #   include <string.h>  // added by rk for memcpy  
 # include <cstdlib>  
 # include <errno.h>  
 # include <fcntl.h>  
 # include <netdb.h>  
 # include <netinet/in.h>  
 # include <arpa/inet.h>  
 # include <sys/socket.h>  
 # include <errno.h>  
 #endif #endif
  
 #include <Pegasus/Common/Sharable.h>  
 PEGASUS_NAMESPACE_BEGIN PEGASUS_NAMESPACE_BEGIN
  
 static Uint32 _socketInterfaceRefCount = 0; static Uint32 _socketInterfaceRefCount = 0;
  
 Sint32 Socket::read(PEGASUS_SOCKET socket, void* ptr, Uint32 size)  Sint32 Socket::read(SocketHandle socket, void* ptr, Uint32 size)
 { {
 #ifdef PEGASUS_OS_TYPE_WINDOWS #ifdef PEGASUS_OS_TYPE_WINDOWS
     return ::recv(socket, (char*)ptr, size, 0);     return ::recv(socket, (char*)ptr, size, 0);
 #else #else
 #if defined (__GNUC__) && !defined(PEGASUS_OS_SOLARIS) && !defined(PEGASUS_OS_DARWIN) && !defined(PEGASUS_OS_LSB)      int status;
     int ccode = TEMP_FAILURE_RETRY(::read(socket, (char*)ptr, size));      PEGASUS_RETRY_SYSTEM_CALL(::read(socket, (char*)ptr, size), status);
     return ccode;      return status;
 #else  
     return ::read(socket, (char*)ptr, size);  
 #endif  
 #endif #endif
 } }
  
 Sint32 Socket::write(PEGASUS_SOCKET socket, const void* ptr, Uint32 size)  Sint32 Socket::write(SocketHandle socket, const void* ptr, Uint32 size)
 { {
 #ifdef PEGASUS_OS_TYPE_WINDOWS #ifdef PEGASUS_OS_TYPE_WINDOWS
     return ::send(socket, (const char*)ptr, size, 0);     return ::send(socket, (const char*)ptr, size, 0);
 #else #else
 #if (__GNUC__) && !defined(PEGASUS_OS_SOLARIS) && !defined(PEGASUS_OS_DARWIN) && !defined(PEGASUS_OS_LSB)      int status;
     int ccode = TEMP_FAILURE_RETRY(::write(socket, (char*)ptr, size));      PEGASUS_RETRY_SYSTEM_CALL(::write(socket, (char*)ptr, size), status);
     return ccode;      return status;
 #else  
     return ::write(socket, (char*)ptr, size);  
 #endif  
 #endif #endif
 } }
  
 void Socket::close(PEGASUS_SOCKET socket)  void Socket::close(SocketHandle socket)
 { {
   if(-1 != socket)      if (socket != -1)
    {    {
     #ifdef PEGASUS_OS_TYPE_WINDOWS     #ifdef PEGASUS_OS_TYPE_WINDOWS
     if(!closesocket(socket)) socket=-1;          if(!closesocket(socket))
               socket = -1;
     #else     #else
     #if (__GNUC__) && !defined(PEGASUS_OS_SOLARIS) && !defined(PEGASUS_OS_DARWIN) && !defined(PEGASUS_OS_LSB)          int status;
        if(!TEMP_FAILURE_RETRY(::close(socket))) socket = -1;          PEGASUS_RETRY_SYSTEM_CALL(::close(socket), status);
     #else  
        if(!::close(socket)) socket = -1;          if (status == 0)
     #endif              socket = -1;
     #endif     #endif
    }    }
 } }
  
 void Socket::enableBlocking(PEGASUS_SOCKET socket)  void Socket::enableBlocking(SocketHandle socket)
 { {
 #ifdef PEGASUS_OS_TYPE_WINDOWS #ifdef PEGASUS_OS_TYPE_WINDOWS
     unsigned long flag = 0;     unsigned long flag = 0;
Line 122 
Line 113 
 #endif #endif
 } }
  
 void Socket::disableBlocking(PEGASUS_SOCKET socket)  void Socket::disableBlocking(SocketHandle socket)
 { {
 #ifdef PEGASUS_OS_TYPE_WINDOWS #ifdef PEGASUS_OS_TYPE_WINDOWS
     unsigned long flag = 1;     unsigned long flag = 1;
Line 159 
Line 150 
 #endif #endif
 } }
  
   
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END
  


Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2