/* -*- mode: c++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /*************************************************************************** * File: socket.h * This file belongs to the Bifrost project. * Socket wrapper class header file. * Date: Wed Sep 2 09:02:38 CEST 2009 * Author: Bent Bisballe Nyeng * Copyright: 2009 * Email: deva@aasimon.org ****************************************************************************/ #ifndef __BIFROST_SOCKET_H__ #define __BIFROST_SOCKET_H__ #include #include typedef unsigned short int port_t; #ifdef WIN32 typedef SOCKET socket_t; #define _throw(...) #else typedef int socket_t; #define _throw(fmt...) throw(fmt) #endif struct socket_private_t; class Socket { public: class BindException : public std::exception {}; class MulticastTTLException : public std::exception {}; class MulticastGroupJoinException : public std::exception {}; class ReceiveException : public std::exception {}; class SendException : public std::exception {}; class WSAException : public std::exception {}; class AddressParseException : public std::exception {}; class OpenException : public std::exception {}; Socket() _throw(WSAException); ~Socket(); void open(std::string address, port_t port) _throw(AddressParseException, OpenException); void setSocketFiledescriptor(socket_t sock, std::string address, port_t port) _throw(AddressParseException); void setSend(unsigned char ttl) _throw(MulticastTTLException, MulticastGroupJoinException); void setRecv() _throw(BindException); virtual size_t sendTo(void *data, size_t size) _throw(SendException); virtual size_t recvFrom(void *data, size_t size) _throw(ReceiveException); private: struct socket_private_t *prv; }; #endif/*__BIFROST_SOCKET_H__*/