r23701: when we create a new socket with socket_accept(), clear any flags that
[samba.git] / source / lib / socket / socket.c
index d975eae2dc79a9b20251951ff9ee0159d6739bb8..89f8fe5a56fac26dcc1d618a018241aaa2aa5614 100644 (file)
@@ -30,7 +30,8 @@
 */
 static int socket_destructor(struct socket_context *sock)
 {
-       if (sock->ops->fn_close) {
+       if (sock->ops->fn_close && 
+           !(sock->flags & SOCKET_FLAG_NOCLOSE)) {
                sock->ops->fn_close(sock);
        }
        return 0;
@@ -165,6 +166,7 @@ _PUBLIC_ NTSTATUS socket_accept(struct socket_context *sock, struct socket_conte
 
        if (NT_STATUS_IS_OK(status)) {
                talloc_set_destructor(*new_sock, socket_destructor);
+               (*new_sock)->flags = 0;
        }
 
        return status;
@@ -547,3 +549,10 @@ _PUBLIC_ void set_socket_options(int fd, const char *options)
        talloc_free(options_list);
 }
 
+/*
+  set some flags on a socket 
+ */
+void socket_set_flags(struct socket_context *sock, unsigned flags)
+{
+       sock->flags |= flags;
+}