1 // Copyright (C) 1999-2005 Open Source Telecom Corporation.
2 // Copyright (C) 2006-2010 David Sugar, Tycho Softworks.
3 //
4 // This program is free software; you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation; either version 2 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 //
18 // As a special exception, you may use this file as part of a free software
19 // library without restriction. Specifically, if other files instantiate
20 // templates or use macros or inline functions from this file, or you compile
21 // this file and link it with other files to produce an executable, this
22 // file does not by itself cause the resulting executable to be covered by
23 // the GNU General Public License. This exception does not however
24 // invalidate any other reasons why the executable file might be covered by
25 // the GNU General Public License.
26 //
27 // This exception applies only to the code released under the name GNU
28 // Common C++. If you copy code from other releases into a copy of GNU
29 // Common C++, as the General Public License permits, the exception does
30 // not apply to the code that you add in this way. To avoid misleading
31 // anyone as to the status of such modified files, you must delete
32 // this exception notice from them.
33 //
34 // If you write modifications of your own for GNU Common C++, it is your choice
35 // whether to permit this exception to apply to your modifications.
36 // If you do not wish that, delete this exception notice.
37 //
38
44 #ifndef CCXX_UNIX_H_
45 #define CCXX_UNIX_H_
46
47 #ifndef CCXX_MISSING_H_
49 #endif
50
51 #ifndef CCXX_SOCKET_H_
53 #endif
54
55 #ifdef CCXX_NAMESPACES
56 namespace ost {
57 #endif
58
59 #ifndef WIN32
60
75 protected:
79
82
83 public:
92 UnixSocket(
const char* pathname,
int backlog = 5);
93
99
104 };
105
120 private:
121 int doallocate();
122
123 protected:
127
133
140 void allocate(int size);
141
146 void endStream(void);
147
154 virtual int underflow(void);
155
164 int uflow(void);
165
173 int overflow(int ch);
174
181 void connect(const char* pathname, int size);
182
191 {return ((std::iostream *)this);};
192
193 public:
205
215
222 {timeout = to;};
223
231
237
244 int sync(void);
245
254
261 {return bufsize;};
262 };
263
273 public:
278
286 unixstream(
const char *pathname,
int buffer = 512);
287
296
304 void open(
const char *pathname,
int buffer = 512)
306
313 void open(
UnixSocket &unixsock,
int buffer = 512);
314
318 void close(void);
319
323 bool operator!() const;
324 };
325
337 protected:
351
358 void initial(void);
359
360 public:
370 UnixSession(
const char* pathname,
int size = 512,
int pri = 0,
int stack = 0);
371
382 int pri = 0, int stack = 0);
383
388 };
389
390 #endif // ndef WIN32
391
392 #ifdef CCXX_NAMESPACES
393 }
394 #endif
395
396 #endif
397
398
399
virtual bool isPending(Pending pend, timeout_t timeout=TIMEOUT_INF)
Get the status of pending operations.
The Socket is used as the base for all Internet protocol services under Common C++.
int getBufferSize(void) const
Return the size of the current stream buffering used.
void close(void)
Close the active tcp stream connection.
void setTimeout(timeout_t to)
Set the I/O operation timeout for socket I/O operations.
substitute functions which may be missing in target platform libc.
Unix domain sockets are used for stream based connected sessions between processes on the same machin...
Unix streams are used to represent Unix domain client connections to a local server for accepting cli...
The socket port is an internal class which is attached to and then serviced by a specific SocketServi...
bool isPendingConnection(timeout_t timeout=TIMEOUT_INF)
Used to wait for pending connection requests.
The Unix domain session is used to primarily to represent a client connection that can be managed on ...
Every thread of execution in an application is created by instantiating an object of a class derived ...
void connect(const char *pathname, int size)
Create a Unix domain stream by connecting to a Unix domain socket.
A more natural C++ "unixstream" class for use by non-threaded applications.
std::iostream * unixstr(void)
Used in derived classes to refer to the current object via it's iostream.
void open(const char *pathname, int buffer=512)
Open a tcp stream connection.
Network addresses and sockets related classes.