Binding

client determines…
Which server should it connect to?
-service name, version number…
How will it connect to that server?
-IP address, network protocol,…

Registry == database of available services
-search for service name to find service (which) and contact details (now)
-deistributed
any RPC service can register
-machine-specific
for services running on same machine
client must know machine address
-> registry provides port number needed for connection

Application use binding & registries

procedure interface: foo(int, int*)
in local calls: foo(x, y) => ok
in remote calls: foo(x, y) => ???

handling partial failer
when a client hangs..
– server down? service down? network down? message lost?
– timeout and tretry => no guarantees

struct square_in {
	int arg1;
};
struct square_out {
	int res1;
};

program SQUARE_PROG {
	version SQUARE_VERS {
		square_out SQUARE_PROG(square_in) = 1;
	} = 1;
} = 0x31230000;