Mono.Zeroconf – Rev 1

Subversion Repositories:
Rev:
// Copyright 2006 Alp Toker <alp@atoker.com>
// This software is made available under the MIT License
// See COPYING for details

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;

using Mono.Unix;
using Mono.Unix.Native;

namespace NDesk.DBus.Transports
{
        class UnixMonoTransport : UnixTransport
        {
                protected Socket socket;

                public override void Open (string path, bool @abstract)
                {
                        if (@abstract)
                                socket = OpenAbstractUnix (path);
                        else
                                socket = OpenUnix (path);

                        socket.Blocking = true;
                        SocketHandle = (long)socket.Handle;
                        //Stream = new UnixStream ((int)socket.Handle);
                        Stream = new NetworkStream (socket);
                }

                //send peer credentials null byte. note that this might not be portable
                //there are also selinux, BSD etc. considerations
                public override void WriteCred ()
                {
                        Stream.WriteByte (0);
                }

                protected Socket OpenAbstractUnix (string path)
                {
                        AbstractUnixEndPoint ep = new AbstractUnixEndPoint (path);

                        Socket client = new Socket (AddressFamily.Unix, SocketType.Stream, 0);
                        client.Connect (ep);

                        return client;
                }

                public Socket OpenUnix (string path)
                {
                        UnixEndPoint remoteEndPoint = new UnixEndPoint (path);

                        Socket client = new Socket (AddressFamily.Unix, SocketType.Stream, 0);
                        client.Connect (remoteEndPoint);

                        return client;
                }
        }
}