.\"release ownership of a socket to another object
.DT
socket_release
$MUDNAME$ driver help
socket_release
.SH Name
.SI 5
socket_release() - release ownership of a socket to another object
.EI
.SH Synopsis
.SI 5
#include <socket_errors.h>
int socket_release( int socket, object ob,
string | function release_callback );
.EI
.SH Description
.SP 5 5
socket_release() is used to change ownership (and control) of a socket
to another object. It is useful in daemon objects (like inetd) which
handle connection setup and then transfer a connected socket to another
object for further processing.
Socket ownership transfer involves a handshake between the current owner
object and the object to which the current owner wishes to transfer the
socket. The handshake is initiated when socket_release() is called.
socket_release() does appropriate security/integrity checking and then
calls the `release_callback' function in object `ob'. This function is used
to notify `ob' that socket ownership is being transferred to it. It is
then `ob's responsibility to call socket_acquire() within the release
callback function. If socket_acquire() is called, the handshake is
complete and socket ownership has been successfully transferred to `ob'.
`ob' may decline to accept responsibility for the socket by not calling
socket_acquire(), in which case ownership does not change and the
current socket owner must decide how to respond to this.
If the socket ownership is successfully transfered, socket_release()
returns EESUCCESS. If `ob' does not accept ownership for the socket then
EESOCKNOTRLSD is returned. Other errors can be returned based on
security violation, bad socket descriptor values, etc.
.EP
.SH See also
.SI 5
socket_acquire()
.EI