00001 #ifndef CLASSLIB_LOCAL_SOCKET_H
00002 # define CLASSLIB_LOCAL_SOCKET_H
00003
00004
00005
00006 # include "classlib/iobase/Socket.h"
00007 # include <string>
00008
00009
00010
00011
00012
00013 struct sockaddr_un;
00014
00015 namespace lat {
00016
00017
00018
00019
00020 class LocalAddress : public SocketAddress
00021 {
00022 public:
00023 LocalAddress (const std::string &path);
00024 LocalAddress (const char *path = "");
00025 LocalAddress (const LocalAddress &a);
00026 ~LocalAddress (void);
00027 LocalAddress &operator= (const LocalAddress &x);
00028
00029 virtual size_t size (void) const;
00030 virtual int family (void) const;
00031 virtual sockaddr * address (void) const;
00032
00033 const char * path (void) const;
00034
00035 private:
00036 sockaddr_un *m_address;
00037 };
00038
00040
00041 class LocalSocket : public Socket
00042 {
00043 public:
00044 LocalSocket (void);
00045 LocalSocket (int type, int protocol = 0);
00046 LocalSocket (const LocalAddress &to,
00047 int type = SocketConst::TypeStream,
00048 int protocol = 0);
00049 ~LocalSocket (void);
00050
00051 void create (int type = SocketConst::TypeStream,
00052 int protocol = 0);
00053
00054 void bind (const LocalAddress &a);
00055 void connect (const LocalAddress &a);
00056
00057 virtual LocalAddress sockname (void);
00058 virtual LocalAddress peername (void);
00059
00060
00061 using Socket::read;
00062 using Socket::peek;
00063 using Socket::write;
00064
00065 virtual IOSize read (void *into, IOSize n, LocalAddress &source);
00066 IOSize read (IOBuffer into, LocalAddress &source);
00067 virtual IOSize peek (void *into, IOSize n, LocalAddress &source);
00068 IOSize peek (IOBuffer into, LocalAddress &source);
00069 virtual IOSize write (const void *from, IOSize n, const LocalAddress &dest);
00070 IOSize write (IOBuffer from, const LocalAddress &dest);
00071
00072 protected:
00073 virtual Socket * copy (void);
00074 };
00075
00076
00077
00078
00079 }
00080 #endif // CLASSLIB_LOCAL_SOCKET_H