ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/c++/socket++-1.10/sockstream.h
Revision: 1.2
Committed: Mon Jun 10 14:10:44 2002 UTC (22 years, 3 months ago) by tdb
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
Tidy up of files. These are all old things that are not only no longer used
but are also probably useless to anyone other than us. This saves checking
them out all the time, and makes the "cms/source" tree contain only current
stuff. They'll still exist in the attic's though :)

File Contents

# User Rev Content
1 ab11 1.1 // sockstream.h -*- C++ -*- socket library
2     // Copyright (C) 1992,1993,1994 Gnanasekaran Swaminathan <gs4t@virginia.edu>
3     //
4     // Permission is granted to use at your own risk and distribute this software
5     // in source and binary forms provided the above copyright
6     // notice and this paragraph are preserved on all copies.
7     // This software is provided "as is" with no express or implied warranty.
8     //
9     // Version: 17Oct95 1.10
10    
11     #ifndef _SOCKSTREAM_H
12     #define _SOCKSTREAM_H
13    
14     #include <iostream.h>
15     #include <stddef.h>
16     #include <stdio.h>
17     #include <sys/types.h>
18     #include <sys/uio.h>
19     #include <sys/socket.h>
20    
21     #ifndef _G_config_h
22     // non libg++ or g++ compilation
23     # define _S_NOLIBGXX
24    
25     # define _S_USER_BUF 0x0001
26     # define _S_UNBUFFERED 0x0002
27     # define _S_NO_READS 0x0004
28     # define _S_NO_WRITES 0x0008
29     # define _S_EOF_SEEN 0x0010
30     # define _S_ERR_SEEN 0x0020
31     # define _S_DELETE_DONT_CLOSE 0x0040
32     # define _S_LINKED 0x0080
33     # define _S_LINE_BUF 0x0200
34    
35     # define _G_ssize_t size_t
36    
37     #else
38     # ifndef _S_USER_BUF
39     // libg++ 2.5.x
40     # define _S_USER_BUF _IO_USER_BUF
41     # define _S_UNBUFFERED _IO_UNBUFFERED
42     # define _S_NO_READS _IO_NO_READS
43     # define _S_NO_WRITES _IO_NO_WRITES
44     # define _S_EOF_SEEN _IO_EOF_SEEN
45     # define _S_ERR_SEEN _IO_ERR_SEEN
46     # define _S_DELETE_DONT_CLOSE _IO_DELETE_DONT_CLOSE
47     # define _S_LINKED _IO_LINKED
48     # define _S_LINE_BUF _IO_LINE_BUF
49     # endif // !_S_USER_BUF
50    
51     #endif // !_G_config_h
52    
53     #ifdef __linux__
54     // linux leaves these things out. We define it for compatitbility
55     // not for their use.
56     # define SO_ACCEPTCONN 0x0002
57     # define SO_USELOOPBACK 0x0040
58     # define SO_SNDLOWAT 0x1003
59     # define SO_RCVLOWAT 0x1004
60     # define SO_SNDTIMEO 0x1005
61     # define SO_RCVTIMEO 0x1006
62    
63     # define MSG_MAXIOVLEN 16
64     # define SOMAXCONN 5
65     #endif // __linux__
66    
67     extern void sock_error (const char* classname, const char* error_message);
68    
69     typedef int sockexcept;
70    
71     struct sockaddr;
72    
73     class sockAddr {
74     public:
75     virtual ~sockAddr() {}
76    
77     virtual operator void* () const =0;
78     operator sockaddr* () const { return addr (); }
79     virtual int size () const =0;
80     virtual int family () const =0;
81     virtual sockaddr* addr () const =0;
82    
83     void error (const char* errmsg) const;
84     };
85    
86     struct msghdr;
87    
88     class sockbuf: public streambuf {
89     public:
90     enum type {
91     sock_stream = SOCK_STREAM,
92     sock_dgram = SOCK_DGRAM,
93     sock_raw = SOCK_RAW,
94     sock_rdm = SOCK_RDM,
95     sock_seqpacket = SOCK_SEQPACKET
96     };
97     enum option {
98     so_debug = SO_DEBUG,
99     so_acceptconn = SO_ACCEPTCONN,
100     so_reuseaddr = SO_REUSEADDR,
101     so_keepalive = SO_KEEPALIVE,
102     so_dontroute = SO_DONTROUTE,
103     so_broadcast = SO_BROADCAST,
104     so_useloopback = SO_USELOOPBACK,
105     so_linger = SO_LINGER,
106     so_oobinline = SO_OOBINLINE,
107     so_sndbuf = SO_SNDBUF,
108     so_rcvbuf = SO_RCVBUF,
109     so_sndlowat = SO_SNDLOWAT,
110     so_rcvlowat = SO_RCVLOWAT,
111     so_sndtimeo = SO_SNDTIMEO,
112     so_rcvtimeo = SO_RCVTIMEO,
113     so_error = SO_ERROR,
114     so_type = SO_TYPE
115     };
116     enum level { sol_socket = SOL_SOCKET };
117     enum msgflag {
118     msg_oob = MSG_OOB,
119     msg_peek = MSG_PEEK,
120     msg_dontroute = MSG_DONTROUTE,
121    
122     msg_maxiovlen = MSG_MAXIOVLEN
123     };
124     enum shuthow {
125     shut_read,
126     shut_write,
127     shut_readwrite
128     };
129     enum { somaxconn = SOMAXCONN };
130     struct socklinger {
131     int l_onoff; // option on/off
132     int l_linger; // linger time
133    
134     socklinger (int a, int b): l_onoff (a), l_linger (b) {}
135     };
136    
137     protected:
138     struct sockcnt {
139     int sock;
140     int cnt;
141    
142     sockcnt(int s, int c): sock(s), cnt(c) {}
143     };
144    
145     sockcnt* rep; // counts the # refs to sock
146     int stmo; // -1==block, 0==poll, >0 == waiting time in secs
147     int rtmo; // -1==block, 0==poll, >0 == waiting time in secs
148    
149     virtual int underflow ();
150     virtual int overflow (int c = EOF);
151     virtual int doallocate ();
152     int flush_output ();
153    
154     #ifdef _S_NOLIBGXX
155     int x_flags; // port to USL iostream
156     int xflags () const { return x_flags; }
157     int xsetflags (int f) { return x_flags |= f; }
158     int xflags (int f)
159     { int ret = x_flags; x_flags = f; return ret; }
160     void xput_char (char c) { *pptr() = c; pbump (1); }
161     int linebuffered () const { return x_flags & _S_LINE_BUF; }
162     #endif // _S_NOLIBGXX
163    
164     public:
165     sockbuf (int soc = -1);
166     sockbuf (int, type, int proto=0);
167     sockbuf (const sockbuf&);
168     sockbuf& operator = (const sockbuf&);
169     virtual ~sockbuf ();
170     operator int () const { return rep->sock; }
171    
172    
173     virtual sockbuf* open (type, int proto=0);
174     virtual sockbuf* close ();
175     virtual int sync ();
176     virtual _G_ssize_t sys_read (char* buf, _G_ssize_t len);
177     virtual _G_ssize_t sys_write (const void* buf, long len);
178     virtual int xsputn (const char* s, int n);
179     int is_open () const { return rep->sock >= 0; }
180     int is_eof () { return xflags() & _S_EOF_SEEN; }
181    
182    
183     virtual int bind (sockAddr&);
184     virtual int connect (sockAddr&);
185    
186     void listen (int num=somaxconn);
187     virtual sockbuf accept ();
188     virtual sockbuf accept (sockAddr& sa);
189    
190     int read (void* buf, int len);
191     int recv (void* buf, int len, int msgf=0);
192     int recvfrom(sockAddr& sa,
193     void* buf, int len, int msgf=0);
194    
195     #ifndef __linux__
196     int recvmsg (msghdr* msg, int msgf=0);
197     int sendmsg (msghdr* msg, int msgf=0);
198     #endif
199    
200     int write (const void* buf, int len);
201     int send (const void* buf, int len, int msgf=0);
202     int sendto (sockAddr& sa,
203     const void* buf, int len, int msgf=0);
204    
205     int sendtimeout (int wp=-1);
206     int recvtimeout (int wp=-1);
207     int is_readready (int wp_sec, int wp_usec=0) const;
208     int is_writeready (int wp_sec, int wp_usec=0) const;
209     int is_exceptionpending (int wp_sec, int wp_usec=0) const;
210    
211     void shutdown (shuthow sh);
212    
213     int getopt(option op, void* buf,int len,
214     level l=sol_socket) const;
215     void setopt(option op, void* buf,int len,
216     level l=sol_socket) const;
217    
218     type gettype () const;
219     int clearerror () const;
220     int debug (int opt= -1) const;
221     int reuseaddr (int opt= -1) const;
222     int keepalive (int opt= -1) const;
223     int dontroute (int opt= -1) const;
224     int broadcast (int opt= -1) const;
225     int oobinline (int opt= -1) const;
226     int linger (int tim= -1) const;
227     int sendbufsz (int sz=-1) const;
228     int recvbufsz (int sz=-1) const;
229    
230     void error (const char* errmsg) const;
231     };
232    
233     class isockstream: public istream {
234     protected:
235     isockstream (): ios (0) {}
236     public:
237     isockstream(sockbuf& sb)
238     : ios (new sockbuf(sb)) {}
239     ~isockstream ();
240    
241    
242     sockbuf* rdbuf () { return (sockbuf*)ios::rdbuf(); }
243     sockbuf* operator -> () { return rdbuf(); }
244    
245     void error (const char* errmsg) const;
246     };
247    
248     class osockstream: public ostream {
249     protected:
250     osockstream (): ios (0) {}
251     public:
252     osockstream(sockbuf& sb)
253     : ios (new sockbuf(sb)) {}
254     ~osockstream ();
255    
256     sockbuf* rdbuf () { return (sockbuf*)ios::rdbuf(); }
257     sockbuf* operator -> () { return rdbuf(); }
258    
259     void error (const char* errmsg) const;
260     };
261    
262     class iosockstream: public iostream {
263     protected:
264     iosockstream (): ios (0) {}
265     public:
266     iosockstream(sockbuf& sb)
267     : ios (new sockbuf(sb)) {}
268     ~iosockstream ();
269    
270     sockbuf* rdbuf () { return (sockbuf*)ios::rdbuf(); }
271     sockbuf* operator -> () { return rdbuf(); }
272    
273     void error (const char* errmsg) const;
274     };
275    
276     #endif // _SOCKSTREAM_H