00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _SG_SOCKET_UDP_HXX
00028 #define _SG_SOCKET_UDP_HXX
00029
00030
00031 #ifndef __cplusplus
00032 # error This library requires C++
00033 #endif
00034
00035 #include <plib/netSocket.h>
00036
00037 #include <simgear/compiler.h>
00038
00039 #include <string>
00040
00041 #include <simgear/math/sg_types.hxx>
00042 #include <simgear/io/iochannel.hxx>
00043
00044 using std::string;
00045
00049 class SGSocketUDP : public SGIOChannel {
00050
00051 private:
00052
00053 netSocket sock;
00054
00055 string hostname;
00056 string port_str;
00057
00058 char save_buf[ 2 * SG_IO_MAX_MSG_SIZE ];
00059 int save_len;
00060
00061 short unsigned int port;
00062
00063 public:
00064
00099 SGSocketUDP( const string& host, const string& port );
00100
00102 ~SGSocketUDP();
00103
00104
00105
00106
00107 bool open( const SGProtocolDir d );
00108
00109
00110 int read( char *buf, int length );
00111
00112
00113 int readline( char *buf, int length );
00114
00115
00116 int write( const char *buf, const int length );
00117
00118
00119 int writestring( const char *str );
00120
00121
00122 bool close();
00123
00128 bool setBlocking( bool value );
00129
00131 inline string get_hostname() const { return hostname; }
00132
00134 inline string get_port_str() const { return port_str; }
00135 };
00136
00137
00138 #endif // _SG_SOCKET_UDP_HXX