Back to index

glibc  2.9
Functions
sendto.c File Reference
#include <errno.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <hurd.h>
#include <hurd/fd.h>
#include <hurd/ifsock.h>
#include <hurd/socket.h>

Go to the source code of this file.

Functions

ssize_t __sendto (int fd, const void *buf, size_t n, int flags, const struct sockaddr_un *addr, socklen_t addr_len)

Function Documentation

ssize_t __sendto ( int  fd,
const void *  buf,
size_t  n,
int  flags,
const struct sockaddr_un addr,
socklen_t  addr_len 
)

Definition at line 30 of file sendto.c.

{
  addr_port_t aport;
  error_t err;
  size_t wrote;

  if (addr->sun_family == AF_LOCAL)
    {
      /* For the local domain, we must look up the name as a file and talk
        to it with the ifsock protocol.  */
      file_t file = __file_name_lookup (addr->sun_path, 0, 0);
      if (file == MACH_PORT_NULL)
       return -1;
      err = __ifsock_getsockaddr (file, &aport);
      __mach_port_deallocate (__mach_task_self (), file);
      if (err == MIG_BAD_ID || err == EOPNOTSUPP)
       /* The file did not grok the ifsock protocol.  */
       err = ENOTSOCK;
      if (err)
       return __hurd_fail (err);
    }
  else
    err = EIEIO;

  /* Get an address port for the desired destination address.  */
  err = HURD_DPORT_USE (fd,
                     ({
                       if (err)
                         err = __socket_create_address (port,
                                                    addr->sun_family,
                                                    (char *) addr,
                                                    addr_len,
                                                    &aport);
                       if (! err)
                         {
                           /* Send the data.  */
                           err = __socket_send (port, aport,
                                             flags, buf, n,
                                             NULL,
                                             MACH_MSG_TYPE_COPY_SEND, 0,
                                             NULL, 0, &wrote);
                           __mach_port_deallocate (__mach_task_self (),
                                                aport);
                         }
                       err;
                     }));

  return err ? __hurd_sockfail (fd, flags, err) : wrote;
}

Here is the call graph for this function: