Avoid dup'ing file descriptors when not necessary.
Do not send fd to the client if ops->get_fd() fails.

diff --git a/server/sock.c b/server/sock.c
index c5f41e4..ec7a067 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -255,12 +255,8 @@
 static int sock_get_fd( struct object *obj )
 {
     struct sock *sock = (struct sock *)obj;
-    int fd;
     assert( obj->ops == &sock_ops );
-    fd = dup( sock->obj.fd );
-    if (fd==-1)
-    	sock_set_error();
-    return fd;
+    return sock->obj.fd;
 }
 
 static void sock_destroy( struct object *obj )