svn commit: samba r6562 - in branches/SAMBA_4_0/source/lib/socket: .

tridge at samba.org tridge at samba.org
Sun May 1 18:49:44 GMT 2005


Author: tridge
Date: 2005-05-01 18:49:43 +0000 (Sun, 01 May 2005)
New Revision: 6562

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

Log:
added support for datagram unix domain sockets in the socket library

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


Changeset:
Modified: branches/SAMBA_4_0/source/lib/socket/socket.c
===================================================================
--- branches/SAMBA_4_0/source/lib/socket/socket.c	2005-05-01 18:49:07 UTC (rev 6561)
+++ branches/SAMBA_4_0/source/lib/socket/socket.c	2005-05-01 18:49:43 UTC (rev 6562)
@@ -159,7 +159,8 @@
 		     size_t wantlen, size_t *nread, uint32_t flags)
 {
 	if (sock->state != SOCKET_STATE_CLIENT_CONNECTED &&
-	    sock->state != SOCKET_STATE_SERVER_CONNECTED) {
+	    sock->state != SOCKET_STATE_SERVER_CONNECTED &&
+	    sock->type  != SOCKET_TYPE_DGRAM) {
 		return NT_STATUS_INVALID_PARAMETER;
 	}
 

Modified: branches/SAMBA_4_0/source/lib/socket/socket_unix.c
===================================================================
--- branches/SAMBA_4_0/source/lib/socket/socket_unix.c	2005-05-01 18:49:07 UTC (rev 6561)
+++ branches/SAMBA_4_0/source/lib/socket/socket_unix.c	2005-05-01 18:49:43 UTC (rev 6562)
@@ -38,9 +38,22 @@
 
 static NTSTATUS unixdom_init(struct socket_context *sock)
 {
-	sock->fd = socket(PF_UNIX, SOCK_STREAM, 0);
+	int type;
+
+	switch (sock->type) {
+	case SOCKET_TYPE_STREAM:
+		type = SOCK_STREAM;
+		break;
+	case SOCKET_TYPE_DGRAM:
+		type = SOCK_DGRAM;
+		break;
+	default:
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
+	sock->fd = socket(PF_UNIX, type, 0);
 	if (sock->fd == -1) {
-		return NT_STATUS_INSUFFICIENT_RESOURCES;
+		return map_nt_error_from_unix(errno);
 	}
 	sock->private_data = NULL;
 
@@ -126,9 +139,11 @@
 		return unixdom_error(errno);
 	}
 
-	ret = listen(sock->fd, queue_size);
-	if (ret == -1) {
-		return unixdom_error(errno);
+	if (sock->type == SOCKET_TYPE_STREAM) {
+		ret = listen(sock->fd, queue_size);
+		if (ret == -1) {
+			return unixdom_error(errno);
+		}
 	}
 
 	if (!(flags & SOCKET_FLAG_BLOCK)) {
@@ -151,6 +166,10 @@
 	socklen_t cli_addr_len = sizeof(cli_addr);
 	int new_fd;
 
+	if (sock->type != SOCKET_TYPE_STREAM) {
+		return NT_STATUS_INVALID_PARAMETER;
+	}
+
 	new_fd = accept(sock->fd, (struct sockaddr *)&cli_addr, &cli_addr_len);
 	if (new_fd == -1) {
 		return unixdom_error(errno);
@@ -290,8 +309,5 @@
 
 const struct socket_ops *socket_unixdom_ops(enum socket_type type)
 {
-	if (type != SOCKET_TYPE_STREAM) {
-		return NULL;
-	}
 	return &unixdom_ops;
 }



More information about the samba-cvs mailing list