INTRODUCTION
Overview
Download and Install
Documentation
Publications

REPOSITORY
Libraries

DEVELOPER
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         
tcpport.h
1/*
2 * GearBox Project: Peer-Reviewed Open-Source Libraries for Robotics
3 * http://gearbox.sf.net/
4 * Copyright (c) 2008 Geoffrey Biggs
5 *
6 * flexiport flexible hardware data communications library.
7 *
8 * This distribution is licensed to you under the terms described in the LICENSE file included in
9 * this distribution.
10 *
11 * This work is a product of the National Institute of Advanced Industrial Science and Technology,
12 * Japan. Registration number: H20PRO-881
13 *
14 * This file is part of flexiport.
15 *
16 * flexiport is free software: you can redistribute it and/or modify it under the terms of the GNU
17 * Lesser General Public License as published by the Free Software Foundation, either version 3 of
18 * the License, or (at your option) any later version.
19 *
20 * flexiport is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
21 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Lesser General Public License for more details.
23 *
24 * You should have received a copy of the GNU Lesser General Public License along with flexiport.
25 * If not, see <http://www.gnu.org/licenses/>.
26 */
27
28#ifndef __TCPPORT_H
29#define __TCPPORT_H
30
31#include "port.h"
32
33#include <map>
34#include <string>
35
40namespace flexiport
41{
42
58class FLEXIPORT_EXPORT TCPPort : public Port
59{
60 public:
61 TCPPort (std::map<std::string, std::string> options);
62 ~TCPPort ();
63
68 void Open ();
70 void Close ();
72 ssize_t Read (void * const buffer, size_t count);
74 ssize_t ReadFull (void * const buffer, size_t count);
76 ssize_t BytesAvailable ();
78 ssize_t BytesAvailableWait ();
80 ssize_t Write (const void * const buffer, size_t count);
82 void Flush ();
84 void Drain ();
86 std::string GetStatus () const;
88 void SetTimeout (Timeout timeout);
90 void SetCanRead (bool canRead);
92 void SetCanWrite (bool canWrite);
94 bool IsOpen () const { return _open; }
95
96 private:
97 int _sock; // Socket connected to wherever the data is coming from.
98 int _listenSock; // Socket to listen on when in listen mode.
99
100 std::string _ip;
101 unsigned int _port;
102 bool _isListener; // True if this port should listen instead of actively connecting.
103 bool _open;
104
105 void CheckPort (bool read);
106
107 bool ProcessOption (const std::string &option, const std::string &value);
108
109 void Connect ();
110 void WaitForConnection ();
111 typedef enum {TIMED_OUT, DATA_AVAILABLE, CAN_WRITE} WaitStatus;
112 WaitStatus WaitForDataOrTimeout ();
113 bool IsDataAvailable ();
114 WaitStatus WaitForWritableOrTimeout ();
115 void SetSocketBlockingFlag ();
116};
117
118} // namespace flexiport
119
122#endif // __TCPPORT_H
Base Port class.
Definition: port.h:80
TCP implementation of the Port class.
Definition: tcpport.h:59
bool IsOpen() const
Check if the port is open.
Definition: tcpport.h:94
An object used to represent timeouts.
Definition: timeout.h:63
FlexiPort data communications library.
 

Generated for GearBox by  doxygen 1.4.5