00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef CONNECTION_H
00016 #define CONNECTION_H
00017
00018 #include "pandabase.h"
00019 #include "referenceCount.h"
00020 #include "netAddress.h"
00021 #include "lightReMutex.h"
00022
00023 class Socket_IP;
00024 class ConnectionManager;
00025 class NetDatagram;
00026
00027
00028
00029
00030
00031
00032 class EXPCL_PANDA_NET Connection : public ReferenceCount {
00033 PUBLISHED:
00034 Connection(ConnectionManager *manager, Socket_IP *socket);
00035 ~Connection();
00036
00037 NetAddress get_address() const;
00038 ConnectionManager *get_manager() const;
00039
00040 Socket_IP *get_socket() const;
00041
00042 void set_collect_tcp(bool collect_tcp);
00043 bool get_collect_tcp() const;
00044 void set_collect_tcp_interval(double interval);
00045 double get_collect_tcp_interval() const;
00046
00047 BLOCKING bool consider_flush();
00048 BLOCKING bool flush();
00049
00050
00051
00052 void set_linger(bool flag, double time);
00053 void set_reuse_addr(bool flag);
00054 void set_keep_alive(bool flag);
00055 void set_recv_buffer_size(int size);
00056 void set_send_buffer_size(int size);
00057 void set_ip_time_to_live(int ttl);
00058 void set_ip_type_of_service(int tos);
00059 void set_no_delay(bool flag);
00060 void set_max_segment(int size);
00061
00062 private:
00063 bool send_datagram(const NetDatagram &datagram, int tcp_header_size);
00064 bool send_raw_datagram(const NetDatagram &datagram);
00065 bool do_flush();
00066 bool check_send_error(bool okflag);
00067
00068 ConnectionManager *_manager;
00069 Socket_IP *_socket;
00070 LightReMutex _write_mutex;
00071
00072 bool _collect_tcp;
00073 double _collect_tcp_interval;
00074 double _queued_data_start;
00075 string _queued_data;
00076 int _queued_count;
00077
00078 friend class ConnectionWriter;
00079 };
00080
00081 #endif