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 00062 class WvUnixListener : public WvFDStream 00063 { 00064 public: 00065 WvUnixListener(const WvUnixAddr &_addr, int create_mode); 00066 virtual ~WvUnixListener(); 00067 00068 virtual void close(); 00069 00076 WvUnixConn *accept(); 00077 00087 void auto_accept(WvIStreamList *list, 00088 WvStreamCallback callfunc = NULL, void *userdata = NULL); 00089 00094 virtual size_t uread(void *buf, size_t len); 00095 virtual size_t uwrite(const void *buf, size_t len); 00096 00098 virtual const WvUnixAddr *src() const; 00099 00100 protected: 00101 WvUnixAddr addr; 00102 bool bound_okay; 00103 WvIStreamList *auto_list; 00104 00105 WvStreamCallback auto_callback; 00106 void *auto_userdata; 00107 00108 static void accept_callback(WvStream &s, void *userdata); 00109 }; 00110 00111 00112 #endif // __WVUNIXSOCKET_H