ADC Home > Reference Library > Reference > Darwin > KPI Reference
|
kpi_socket.h |
Includes: |
This header defines an API for creating and interacting with sockets in the kernel. It is possible to create sockets in the kernel without an associated file descriptor. In some cases, a reference to the socket may be known while the file descriptor is not. These functions can be used for interacting with sockets in the kernel. The API is similar to the user space socket API.
sock_accept |
errno_t sock_accept( socket_t so, struct sockaddr *from, int fromlen, int flags, sock_upcall callback, void*cookie, socket_t *new_so);
so
from
fromlen
flags
callback
cookie
new_so
0 on success otherwise the errno error.
Accepts an incoming connection on a socket. See 'man 2 accept' for more information. Allocating a socket in this manner creates a socket with no associated file descriptor.
sock_bind |
errno_t sock_bind( socket_t so, const struct sockaddr *to);
so
to
0 on success otherwise the errno error.
Binds a socket to a specific address. See 'man 2 bind' for more information.
sock_close |
void sock_close( socket_t so);
so
Close the socket.
sock_connect |
errno_t sock_connect( socket_t so, const struct sockaddr *to, int flags);
so
to
flags
0 on success, EINPROGRESS for a non-blocking connect that has not completed, otherwise the errno error.
Initiates a connection on the socket. See 'man 2 connect' for more information.
sock_getpeername |
errno_t sock_getpeername( socket_t so, struct sockaddr *peername, int peernamelen);
so
peername
peernamelen
0 on success otherwise the errno error.
Retrieves the remote address of a connected socket. See 'man 2 getpeername'.
sock_getsockname |
errno_t sock_getsockname( socket_t so, struct sockaddr *sockname, int socknamelen);
so
sockname
socknamelen
0 on success otherwise the errno error.
Retrieves the local address of a socket. See 'man 2 getsockname'.
sock_getsockopt |
errno_t sock_getsockopt( socket_t so, int level, int optname, void *optval, int *optlen);
so
level
optname
optval
optlen
0 on success otherwise the errno error.
Retrieves a socket option. See 'man 2 getsockopt'.
sock_gettype |
errno_t sock_gettype( socket_t so, int *domain, int *type, int *protocol);
so
domain
type
protocol
0 on success otherwise the errno error.
Retrieves information about the socket. This is the same information that was used to create the socket. If any of the parameters following so are NULL, that information is not retrieved.
sock_ioctl |
errno_t sock_ioctl( socket_t so, unsigned long request, void *argp);
so
request
argp
0 on success otherwise the errno error.
Performs an ioctl operation on a socket. See 'man 2 ioctl'.
sock_isconnected |
int sock_isconnected( socket_t so);
so
0 - socket is not connected. 1 - socket is connected.
Returns whether or not the socket is connected.
sock_isnonblocking |
int sock_isnonblocking( socket_t so);
0 - socket will block. 1 - socket will not block.
Returns whether or not the socket is non-blocking. In
the context of this KPI, non-blocking means that functions to
perform operations on a socket will not wait for completion.
To enable or disable blocking, use the FIONBIO ioctl. The
parameter is an int. If the int is zero, the socket will block.
If the parameter is non-zero, the socket will not block.
sock_listen |
errno_t sock_listen( socket_t so, int backlog);
so
backlog
0 on success otherwise the errno error.
Indicate that the socket should start accepting incoming connections. See 'man 2 listen'.
sock_receive |
errno_t sock_receive( socket_t so, struct msghdr *msg, int flags, size_t *recvdlen);
so
msg
flags
recvdlen
0 on success, EWOULDBLOCK if non-blocking and operation would cause the thread to block, otherwise the errno error.
Receive data from a socket. Similar to recvmsg. See 'man 2 recvmsg' for more information about receiving data.
sock_receivembuf |
errno_t sock_receivembuf( socket_t so, struct msghdr *msg, mbuf_t *data, int flags, size_t *recvlen);
so
msg
data
flags
recvlen
0 on success, EWOULDBLOCK if non-blocking and operation would cause the thread to block, otherwise the errno error.
Receive data from a socket. Similar to sock_receive though data is returned as a chain of mbufs. See 'man 2 recvmsg' for more information about receiving data.
sock_send |
errno_t sock_send( socket_t so, const struct msghdr *msg, int flags, size_t *sentlen);
so
msg
flags
sentlen
0 on success, EWOULDBLOCK if non-blocking and operation would cause the thread to block, otherwise the errno error.
Send data on a socket. Similar to sendmsg. See 'man 2 sendmsg' for more information about sending data.
sock_sendmbuf |
errno_t sock_sendmbuf( socket_t so, const struct msghdr *msg, mbuf_t data, int flags, size_t *sentlen);
so
msg
data
flags
sentlen
0 on success, EWOULDBLOCK if non-blocking and operation would cause the thread to block, otherwise the errno error. Regardless of return value, the mbuf chain 'data' will be freed.
Send data in an mbuf on a socket. Similar to sock_send only the data to be sent is taken from the mbuf chain.
sock_setpriv |
errno_t sock_setpriv( socket_t so, int on);
so
on
0 on success otherwise the errno error.
Set the privileged bit in the socket. Allows for operations that require root privileges.
sock_setsockopt |
errno_t sock_setsockopt( socket_t so, int level, int optname, const void *optval, int optlen);
so
level
optname
optval
optlen
0 on success otherwise the errno error.
Sets a socket option. See 'man 2 setsockopt'.
sock_shutdown |
errno_t sock_shutdown( socket_t so, int how);
so
how
0 on success otherwise the errno error.
Shutdown one or both directions of a connection. See 'man 2 shutdown' for more information.
sock_socket |
errno_t sock_socket( int domain, int type, int protocol, sock_upcall callback, void*cookie, socket_t *new_so);
domain
type
protocol
callback
cookie
new_so
0 on success otherwise the errno error.
Allocate a socket. Allocating a socket in this manner creates a socket with no associated file descriptor. For more information, see 'man 2 socket'.
sock_upcall |
typedef void (*sock_upcall)( socket_t so, void*cookie, int waitf);
so
- A reference to the socket that's ready.
cookie
- The cookie passed in when the socket was created.
waitf
- Indicates whether or not it's safe to block.
sock_upcall is used by a socket to notify an in kernel
client that data is waiting. Instead of making blocking calls in
the kernel, a client can specify an upcall which will be called
when data is available or the socket is ready for sending.
Calls to your upcall function are not serialized and may be
called concurrently from multiple threads in the kernel.
Your upcall function will be called when:
|