diff options
author | Andrew Tridgell <tridge@samba.org> | 2007-05-17 02:19:28 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 14:52:31 -0500 |
commit | 59d1a2b30ef3a57536876d2c58c108b6da19e4fa (patch) | |
tree | 5a607e88cf190bbc078d6e8d7010e5e77508256e /source4/lib/socket | |
parent | 87379e0d5877fc0d045e259d8428304a292088aa (diff) | |
download | samba-59d1a2b30ef3a57536876d2c58c108b6da19e4fa.tar.gz samba-59d1a2b30ef3a57536876d2c58c108b6da19e4fa.tar.bz2 samba-59d1a2b30ef3a57536876d2c58c108b6da19e4fa.zip |
r22960: added a SOCKET_FLAG_NOCLOSE to allow us to tell the socket layer that
we will handle the close of the socket
(This used to be commit d57aaf5ba60464e5e782353a0879a84f8c70dd32)
Diffstat (limited to 'source4/lib/socket')
-rw-r--r-- | source4/lib/socket/socket.c | 10 | ||||
-rw-r--r-- | source4/lib/socket/socket.h | 3 |
2 files changed, 12 insertions, 1 deletions
diff --git a/source4/lib/socket/socket.c b/source4/lib/socket/socket.c index d975eae2dc..548b11ebcc 100644 --- a/source4/lib/socket/socket.c +++ b/source4/lib/socket/socket.c @@ -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; @@ -547,3 +548,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; +} diff --git a/source4/lib/socket/socket.h b/source4/lib/socket/socket.h index 025fc7e13d..161f112ca6 100644 --- a/source4/lib/socket/socket.h +++ b/source4/lib/socket/socket.h @@ -109,6 +109,8 @@ enum socket_state { * is encrypting data. * This modifies the * TESTNONBLOCK case */ +#define SOCKET_FLAG_NOCLOSE 0x00000010 /* don't auto-close on free */ + struct socket_context { enum socket_type type; @@ -196,5 +198,6 @@ NTSTATUS socket_connect_multi(TALLOC_CTX *mem_ctx, const char *server_address, struct socket_context **result, uint16_t *port); void set_socket_options(int fd, const char *options); +void socket_set_flags(struct socket_context *socket, unsigned flags); #endif /* _SAMBA_SOCKET_H */ |