mirror of
https://github.com/thestk/stk
synced 2026-01-12 04:21:52 +00:00
79 lines
1.6 KiB
C++
79 lines
1.6 KiB
C++
/***************************************************/
|
|
/*! \class Socket
|
|
\brief STK internet socket abstract base class.
|
|
|
|
This class provides common functionality for TCP and UDP internet
|
|
socket server and client subclasses.
|
|
|
|
by Perry R. Cook and Gary P. Scavone, 1995--2014.
|
|
*/
|
|
/***************************************************/
|
|
|
|
#include "Socket.h"
|
|
|
|
namespace stk {
|
|
|
|
Socket :: Socket()
|
|
{
|
|
soket_ = -1;
|
|
port_ = -1;
|
|
}
|
|
|
|
Socket :: ~Socket()
|
|
{
|
|
this->close( soket_ );
|
|
|
|
#if defined(__OS_WINDOWS__)
|
|
|
|
WSACleanup();
|
|
|
|
#endif
|
|
}
|
|
|
|
void Socket :: close( int socket )
|
|
{
|
|
if ( !isValid( socket ) ) return;
|
|
|
|
#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
|
|
|
|
::close( socket );
|
|
|
|
#elif defined(__OS_WINDOWS__)
|
|
|
|
::closesocket( socket );
|
|
|
|
#endif
|
|
}
|
|
|
|
void Socket :: setBlocking( int socket, bool enable )
|
|
{
|
|
if ( !isValid( socket ) ) return;
|
|
|
|
#if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
|
|
|
|
int tmp = ::fcntl( socket, F_GETFL, 0 );
|
|
if ( tmp >= 0 )
|
|
tmp = ::fcntl( socket, F_SETFL, enable ? (tmp &~ O_NONBLOCK) : (tmp | O_NONBLOCK) );
|
|
|
|
#elif defined(__OS_WINDOWS__)
|
|
|
|
unsigned long non_block = !enable;
|
|
ioctlsocket( socket, FIONBIO, &non_block );
|
|
|
|
#endif
|
|
}
|
|
|
|
int Socket :: writeBuffer(int socket, const void *buffer, long bufferSize, int flags )
|
|
{
|
|
if ( !isValid( socket ) ) return -1;
|
|
return send( socket, (const char *)buffer, bufferSize, flags );
|
|
}
|
|
|
|
int Socket :: readBuffer(int socket, void *buffer, long bufferSize, int flags )
|
|
{
|
|
if ( !isValid( socket ) ) return -1;
|
|
return recv( socket, (char *)buffer, bufferSize, flags );
|
|
}
|
|
|
|
} // stk namespace
|