topical media & game development

talk show tell print

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.