views:

254

answers:

1

I'm trying to adapt this python code I found for connecting to the Dropbox daemon:

def connect(self, cmd_socket="~/.dropbox/command_socket", iface_socket="~/.dropbox/iface_socket"):
 "Connects to the Dropbox command_socket, returns True if it was successfull."
 self.iface_sck = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
 self.sck = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
 try:
  self.sck.connect(os.path.expanduser(cmd_socket)) # try to connect
  self.iface_sck.connect(os.path.expanduser(iface_socket))
 except:
  self.connected = False
  return False
 else: # went smooth
  self.connected = True
  return True

Here is what I have so far:

public bool Connect (int port) {
 return Connect ("~/.dropbox/command_socket", "~/.dropbox/iface_socket",
                 port);
}

public bool Connect (string cmdSocket, string ifaceSocket, int port)
{
 IfaceSocket = new Socket (AddressFamily.Unix, SocketType.Stream,
                           ProtocolType.IP);
 CmdSocket = new Socket (AddressFamily.Unix, SocketType.Stream,
                         ProtocolType.IP);

 try {
  // ExpandUser replaces a leading "/~" with the user's home directory
  IPAddress [] CmdIPs = Dns.GetHostAddresses (ExpandUser (cmdSocket));
  CmdSocket.Connect (CmdIPs [0], port);
  IPAddress [] IfaceIPs = Dns.GetHostAddresses (ExpandUser (ifaceSocket));
  IfaceSocket.Connect (IfaceIPs [0], port);
 } catch (Exception e) {
  // Debug
  Console.WriteLine (e);

  Connected = false;
  return false;
 }

 Connected = true;
 return true;
}

This compiles fine, but when I try to run it, I get System.Net.Sockets.SocketException: No such host is known. I assume this is because cmdSocket and ifaceSocket are paths, not IP addreses. Python appears to handle this automatically, how do I do it in C#? This is my first foray into socket programming, so please point out any obvious mistakes.

+4  A: 

You need to use Mono.Unix.UnixEndPoint from Mono.Posix.dll instead of an IPEndPoint. Everything else is the same. See an example of how XSP uses it here.

Gonzalo