len = strlen (addr.sun_path) + 1;
len = strlen (path) + 1;
static SVCXPRT *makefd_xprt (int, u_int, u_int) internal_function;struct unix_rendezvous {        /* kept in xprt->xp_p1 */  u_int sendsize;  u_int recvsize;};struct unix_conn {		/* kept in xprt->xp_p1 */  enum xprt_stat strm_stat;  u_long x_id;  XDR xdrs;  char verf_body[MAX_AUTH_BYTES];};/* * Usage: *      xprt = svcunix_create(sock, send_buf_size, recv_buf_size); * * Creates, registers, and returns a (rpc) unix based transporter. * Once *xprt is initialized, it is registered as a transporter * see (svc.h, xprt_register).  This routine returns * a NULL if a problem occurred. * * If sock<0 then a socket is created, else sock is used. * If the socket, sock is not bound to a port then svcunix_create * binds it to an arbitrary port.  The routine then starts a unix * listener on the socket's associated port.  In any (successful) case, * xprt->xp_sock is the registered socket number and xprt->xp_port is the * associated port number. * * Since unix streams do buffered io similar to stdio, the caller can specify * how big the send and receive buffers are via the second and third parms; * 0 => use the system default. */SVCXPRT *svcunix_create (int sock, u_int sendsize, u_int recvsize, char *path){  bool_t madesock = FALSE;  SVCXPRT *xprt;  struct unix_rendezvous *r;  struct sockaddr_un addr;  socklen_t len = sizeof (struct sockaddr_in);  if (sock == RPC_ANYSOCK)    {      if ((sock = __socket (AF_UNIX, SOCK_STREAM, 0)) < 0)	{	  perror (_("svc_unix.c - AF_UNIX socket creation problem"));	  return (SVCXPRT *) NULL;	}      madesock = TRUE;    }  memset (&addr, '\0', sizeof (addr));  addr.sun_family = AF_UNIX;  len = strlen (addr.sun_path) + 1;  memcpy (addr.sun_path, path, len);  len += sizeof (addr.sun_family);  bind (sock, (struct sockaddr *) &addr, len);  if (getsockname (sock, (struct sockaddr *) &addr, &len) != 0      || listen (sock, 2) != 0)    {      perror (_("svc_unix.c - cannot getsockname or listen"));      if (madesock)	__close (sock);      return (SVCXPRT *) NULL;    }  r = (struct unix_rendezvous *) mem_alloc (sizeof (*r));  if (r == NULL)    {      fputs (_("svcunix_create: out of memory\n"), stderr);      return NULL;    }  r->sendsize = sendsize;  r->recvsize = recvsize;  xprt = (SVCXPRT *) mem_alloc (sizeof (SVCXPRT));  if (xprt == NULL)    {      fputs (_("svcunix_create: out of memory\n"), stderr);      return NULL;    }  xprt->xp_p2 = NULL;  xprt->xp_p1 = (caddr_t) r;  xprt->xp_verf = _null_auth;  xprt->xp_ops = &svcunix_rendezvous_op;  xprt->xp_port = -1;  xprt->xp_sock = sock;  xprt_register (xprt);  return xprt;}