#ifndef SOCK_H
#define SOCK_H
/*
* Low-level socket-related functions
*/
#include "error.h"
#include <sys/types.h>
/*
* The generic socket handle
*/
struct sock_stream;
/*
* Initialize the socket module's global state. Call this before calling any other sock_* functions.
*/
err_t sock_init (struct error_info *err);
/*
* A simple blocking TCP connect to the given host/service, using getaddrinfo. The connected socket is returned via
* *sock_ptr. In case of errors, additional error information is stored in *err.
*
* @return zero on success, nonzero on error
*
* XXX: blocking
*/
err_t sock_tcp_connect (struct sock_stream **sock_ptr, const char *host, const char *service, struct error_info *err);
/*
* A simple blocking SSL connect to the given host/service. The connected/handshake'd SSL socket is returned via
* *sock_ptr. In case of errors, additional error information is stored in *err.
*
* XXX: blocking
* XXX: doesn't do any certificate verification.
*/
err_t sock_gnutls_connect (struct sock_stream **sock_ptr, const char *host, const char *service, struct error_info *err);
/*
* The generic read/write API for stream sockets.
*/
err_t sock_stream_read (struct sock_stream *sock, void *buf, size_t len);
err_t sock_stream_write (struct sock_stream *sock, const void *buf, size_t len);
/**
* Get last err_info for \a sock, returned via \a *err.
*/
void sock_stream_error (struct sock_stream *sock, struct error_info *err);
#endif