barrier/lib/net/CTCPSocket.h

68 lines
1.5 KiB
C
Raw Normal View History

2002-08-02 23:57:46 +04:00
/*
* synergy -- mouse and keyboard sharing utility
* Copyright (C) 2002 Chris Schoeneman
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file COPYING that should have accompanied this file.
*
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
2001-10-06 18:13:28 +04:00
#ifndef CTCPSOCKET_H
#define CTCPSOCKET_H
#include "IDataSocket.h"
#include "CNetwork.h"
2001-10-06 18:13:28 +04:00
class CMutex;
template <class T>
class CCondVar;
class CThread;
class CBufferedInputStream;
class CBufferedOutputStream;
//! TCP data socket
/*!
A data socket using TCP.
*/
class CTCPSocket : public IDataSocket {
2002-04-29 18:40:01 +04:00
public:
CTCPSocket();
CTCPSocket(CNetwork::Socket);
2001-10-06 18:13:28 +04:00
~CTCPSocket();
// ISocket overrides
virtual void bind(const CNetworkAddress&);
virtual void close();
// IDataSocket overrides
virtual void connect(const CNetworkAddress&);
virtual IInputStream* getInputStream();
virtual IOutputStream* getOutputStream();
2001-10-06 18:13:28 +04:00
2002-04-29 18:40:01 +04:00
private:
void init();
2001-10-21 04:21:02 +04:00
void ioThread(void*);
2002-05-30 20:11:59 +04:00
void ioCleanup();
2001-10-21 04:21:02 +04:00
void ioService();
void closeInput(void*);
void closeOutput(void*);
2001-10-06 18:13:28 +04:00
2002-04-29 18:40:01 +04:00
private:
2001-10-06 18:13:28 +04:00
enum { kClosed = 0, kRead = 1, kWrite = 2, kReadWrite = 3 };
CNetwork::Socket m_fd;
2001-10-06 18:13:28 +04:00
CBufferedInputStream* m_input;
CBufferedOutputStream* m_output;
CMutex* m_mutex;
CThread* m_thread;
UInt32 m_connected;
};
#endif