socket_accept |
Discworld driver help |
socket_accept |
Name
socket_accept() - accept a connection on a socket
Synopsis
#include <socket_errors.h>
int socket_accept( int s, string | function read_callback,
string | function write_callback );
Description
The argument `s' is a socket that has been created with socket_create(), bound to an address with socket_bind(), and is listening for connections after a socket_listen(). socket_accept() extracts the first connection on the queue of pending connections, creates a new socket with the same properties of `s' and allocates a new file descriptor for the socket. If no pending connections are present on the queue, socket_accept() returns an error as described below. The accepted socket is used to read and write data to and from the socket which connected to this one; it is not used to accept more connections. The original socket `s' remains open for accepting further connections.
The argument `read_callback' is the function or name of a function for the driver to call when the new socket (not the accepting socket) receives data.
The read callback should follow this format:
void read_callback( int fd )
Where fd is the socket which is ready to accept data.
The argument `write_callback' is the function or name of a function for the driver to call when the new socket (not the accepting socket) is ready to be written to. The write callback should follow this format:
void write_callback( int fd )
Where fd is the socket which is ready to be written to.
Note: The `close_callback' of the accepting socket (not the new socket) is called if the new socket closes unexpectedly, i.e. not as the result of a socket_close() call. The close callback should follow this format:
void close_callback( int fd )
Where fd is the socket which has closed.
socket_accept() returns a non-negative descriptor for the accepted socket on success. On failure, it returns a negative value. socket_error() can be used on the return value to get a text description of the error.
Errors
These definitions are in <socket_errors.h>:
EEFDRANGE | Descriptor out of range. | |
EEBADF | Descriptor is invalid. | |
EESECURITY | Security violation attempted. | |
EEMODENOTSUPP | Socket mode not supported. | |
EENOTLISTN | Socket not listening. | |
EEWOULDBLOCK | Operation would block. | |
EEINTR | Interrupted system call. | |
EEACCEPT | Problem with accept. | |
EENOSOCKS | No more available efun sockets. |