diff options
Diffstat (limited to 'comm/UnixAddress.cc')
-rw-r--r-- | comm/UnixAddress.cc | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/comm/UnixAddress.cc b/comm/UnixAddress.cc new file mode 100644 index 0000000..469fa2e --- /dev/null +++ b/comm/UnixAddress.cc @@ -0,0 +1,86 @@ +/* + * The Unix Channel + * + * by Michel Beaudouin-Lafon + * + * Copyright 1990-1997 + * Laboratoire de Recherche en Informatique (LRI) + * + * Unix Addresses + * + * $Id$ + * $CurLog$ + * Created from Address.cc + */ + +#include "UnixAddress.h" +#include "error.h" + +#include <stdio.h> + +// constructors for Unix addresses +// a Unix domain address is just a filename +// -> some problems: check for access, when to unlink it ? +// to do : generate name from a template (for uniqueness) +// + +/*?nodoc?*/ +IvlUnixAddress :: IvlUnixAddress () +: IvlAddress () +{ +} + +/*? +Create a Unix domain address associated to file \var{filename}. +The file is not unlinked when the address is destroyed; +it should be unlinked by the application whenever the last socket using this address is closed. +?*/ +IvlUnixAddress :: IvlUnixAddress (const char* filename) +: IvlAddress () +{ + Addr.sun_family = AF_UNIX; + strcpy (Addr.sun_path, filename); + Valid = true; + // should check access to file ??? + // unlink if already there ? +} + +/*?nodoc?*/ +IvlUnixAddress :: ~IvlUnixAddress () +{ + // how to unlink the file ?? +} + +/*?nodoc?*/ +int +IvlUnixAddress :: Family () +{ + return AF_UNIX; +} + +/*?nodoc?*/ +int +IvlUnixAddress :: Length () +{ + if (Valid) + return (Addr.sun_path + strlen (Addr.sun_path)) - (char*) &Addr; + return 0; +} + +/*?nodoc?*/ +SockAddr* +IvlUnixAddress :: GetSockAddr () +{ + return (SockAddr*) &Addr; +} + +/*?nodoc?*/ +char* +IvlUnixAddress :: StrRepr (char* buf) +{ + sprintf (buf, "%s", Addr.sun_path); + return buf; +} + + + |