00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 */ 00006 #ifndef __WVUNIXSOCKET_H 00007 #define __WVUNIXSOCKET_H 00008 00009 #include "wvfdstream.h" 00010 #include "wvaddr.h" 00011 00012 class WvIStreamList; 00013 class WvUnixListener; 00014 00030 class WvUnixConn : public WvFDStream 00031 { 00032 friend class WvUnixListener; 00033 protected: 00034 WvUnixAddr addr; 00035 00037 WvUnixConn(int _fd, const WvUnixAddr &_addr); 00038 00039 public: 00041 WvUnixConn(const WvUnixAddr &_addr); 00042 00043 virtual ~WvUnixConn(); 00044 00050 const WvUnixAddr &localaddr() { return addr; } 00051 00058 virtual const WvUnixAddr *src() const; 00059 00060 public: 00061 const char *wstype() const { return "WvUnixConn"; } 00062 }; 00063 00065 class WvUnixListener : public WvFDStream 00066 { 00067 public: 00068 WvUnixListener(const WvUnixAddr &_addr, int create_mode); 00069 virtual ~WvUnixListener(); 00070 00071 virtual void close(); 00072 00079 WvUnixConn *accept(); 00080 00090 void auto_accept(WvIStreamList *list, 00091 WvStreamCallback callfunc = NULL, void *userdata = NULL); 00092 00097 virtual size_t uread(void *buf, size_t len); 00098 virtual size_t uwrite(const void *buf, size_t len); 00099 00101 virtual const WvUnixAddr *src() const; 00102 00103 protected: 00104 WvUnixAddr addr; 00105 bool bound_okay; 00106 WvIStreamList *auto_list; 00107 00108 WvStreamCallback auto_callback; 00109 void *auto_userdata; 00110 00111 static void accept_callback(WvStream &s, void *userdata); 00112 00113 public: 00114 const char *wstype() const { return "WvUnixListener"; } 00115 }; 00116 00117 00118 #endif // __WVUNIXSOCKET_H