Author: tridge
Date: 2005-06-03 04:19:32 +0000 (Fri, 03 Jun 2005)
New Revision: 7205

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=7205

Log:
added support for sendto() on unix domain sockets

Modified:
   branches/SAMBA_4_0/source/lib/socket/socket_unix.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/socket/socket_unix.c
===================================================================
--- branches/SAMBA_4_0/source/lib/socket/socket_unix.c  2005-06-03 00:39:31 UTC 
(rev 7204)
+++ branches/SAMBA_4_0/source/lib/socket/socket_unix.c  2005-06-03 04:19:32 UTC 
(rev 7205)
@@ -249,6 +249,37 @@
        return NT_STATUS_OK;
 }
 
+
+static NTSTATUS unixdom_sendto(struct socket_context *sock, 
+                              const DATA_BLOB *blob, size_t *sendlen, uint32_t 
flags,
+                              const char *dest_addr, int dest_port)
+{
+       ssize_t len;
+       int flgs = 0;
+       struct sockaddr_un srv_addr;
+
+       if (strlen(dest_addr)+1 > sizeof(srv_addr.sun_path)) {
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
+       ZERO_STRUCT(srv_addr);
+       srv_addr.sun_family = AF_UNIX;
+       strncpy(srv_addr.sun_path, dest_addr, sizeof(srv_addr.sun_path));
+
+       *sendlen = 0;
+
+       len = sendto(sock->fd, blob->data, blob->length, flgs, 
+                    (struct sockaddr *)&srv_addr, sizeof(srv_addr));
+       if (len == -1) {
+               return map_nt_error_from_unix(errno);
+       }       
+
+       *sendlen = len;
+
+       return NT_STATUS_OK;
+}
+
+
 static NTSTATUS unixdom_set_option(struct socket_context *sock, 
                                   const char *option, const char *val)
 {
@@ -294,6 +325,7 @@
        .fn_accept              = unixdom_accept,
        .fn_recv                = unixdom_recv,
        .fn_send                = unixdom_send,
+       .fn_sendto              = unixdom_sendto,
        .fn_close               = unixdom_close,
 
        .fn_set_option          = unixdom_set_option,

Reply via email to