topical media & game development
lib-of-vs-addons-ofxNetwork-src-ofxUDPManager.h / h
ifndef ___ofxUDPManager__H__
define ___ofxUDPManager__H__
////////////////////////////////////////////////////////////////////////////////
// Original author: ???????? we think Christian Naglhofer
// Crossplatform port by: Theodore Watson May 2007 - update Jan 2008
// Changes: Mac (and should be nix) equivilant functions and data types for
// win32 calls, as well as non blocking option SetNonBlocking(bool nonBlocking);
//
////////////////////////////////////////////////////////////////////////////////
/*-----------------------------------------------------------------------------------
USAGE
-------------------------------------------------------------------------------------
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!! LINK WITH ws2_32.lib !!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
UDP Socket Client (sending):
------------------
1) create()
2) connect()
3) send()
...
x) close()
optional:
SetTimeoutSend()
UDP Multicast (sending):
--------------
1) Create()
2) ConnectMcast()
3) Send()
...
x) Close()
extra optional:
SetTTL() - default is 1 (current subnet)
UDP Socket Server (receiving):
------------------
1) create()
2) bind()
3) receive()
...
x) close()
optional:
SetTimeoutReceive()
UDP Multicast (receiving):
--------------
1) Create()
2) BindMcast()
3) Receive()
...
x) Close()
--------------------------------------------------------------------------------*/
include <ofConstants.h>
include <string.h>
include <wchar.h>
include <stdio.h>
ifndef TARGET_WIN32
//unix includes - works for osx should be same for *nix
#include <ctype.h>
#include <netdb.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#ifdef TARGET_LINUX
// linux needs this:
#include <netinet/tcp.h> /* for TCP_MAXSEG value */
#endif
#define SO_MAX_MSG_SIZE TCP_MAXSEG
#define INVALID_SOCKET -1
#define SOCKET_ERROR -1
#define FAR
else
//windows includes
#include <winsock2.h>
#include <Ws2tcpip.h> // TCP/IP annex needed for multicasting
endif
Socket constants.
define SOCKET_TIMEOUT SOCKET_ERROR - 1
define NO_TIMEOUT 0xFFFF
define OF_UDP_DEFAULT_TIMEOUT NO_TIMEOUT
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
// Implementation of a UDP socket.
class ofxUDPManager
{
public:
//constructor
ofxUDPManager();
//destructor
virtual ~ofxUDPManager()
{
if ((m_hSocket)&&(m_hSocket != INVALID_SOCKET)) Close();
}
bool Close();
bool Create();
bool Connect(const char *pHost, unsigned short usPort);
bool ConnectMcast(char *pMcast, unsigned short usPort);
bool Bind(unsigned short usPort);
bool BindMcast(char *pMcast, unsigned short usPort);
int Send(const char* pBuff, const int iSize);
//all data will be sent guaranteed.
int SendAll(const char* pBuff, const int iSize);
int Receive(char* pBuff, const int iSize);
void SetTimeoutSend(int timeoutInSeconds);
void SetTimeoutReceive(int timeoutInSeconds);
int GetTimeoutSend();
int GetTimeoutReceive();
bool GetRemoteAddr(char* address); //returns the IP of last received packet
bool SetReceiveBufferSize(int sizeInByte);
bool SetSendBufferSize(int sizeInByte);
int GetReceiveBufferSize();
int GetSendBufferSize();
bool SetReuseAddress(bool allowReuse);
bool SetEnableBroadcast(bool enableBroadcast);
bool SetNonBlocking(bool useNonBlocking);
int GetMaxMsgSize();
returns -1 on failure
int GetTTL();
bool SetTTL(int nTTL);
protected:
int m_iListenPort;
#ifdef TARGET_WIN32
SOCKET m_hSocket;
#else
int m_hSocket;
#endif
unsigned long m_dwTimeoutReceive;
unsigned long m_dwTimeoutSend;
bool nonBlocking;
struct sockaddr_in saServer;
struct sockaddr_in saClient;
static bool m_bWinsockInit;
bool canGetRemoteAddress;
};
endif // ___ofxUDPManager__H__
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.