/*
 * socklib.c
 *
 * Handy functions for IPv4 socket connections.
 *
 * History:
 *      28/01/2014 Creation
 *      27/05/2014 New API.
 *
 * Author: Dario Rodriguez dario@softhome.net
 * This file is licensed under the terms of the GNU LGPL v2+
 */

#include <stdlib.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/select.h>

#include "socklib.h"

typedef struct _sselect {
        int dummy
} _sselect;

char *ipv4_genip(char *hostname, long *resulthostsize);
int ipv4_genport(char *portname, int fallback);
int ipv4_preconnect(char *host, long hostsize, int port); /* setup socket, set non-blocking, connect(2) call */
int ipv4_connect(int fd); /* tests writeability */
int ipv4_postconnect(int fd); /* hopefully connect(2) suceeded, set blocking */
int ipv4_server(int port);
int ipv4_serverbinded(char *host, long hostsize, int port);
int sock_accept(int fd);
int sock_getinfo(int socket, int *iplen, char *ip, int *port); /* ip must be at least 16 bytes to have room for an ipv6 address */
int sock_queued(int socket);
int sock_setblocking(int socket, int block);

sselect *sselect_init(void);
int sselect_reset(sselect *ssel);
int sselect_addread(sselect *ssel, int fd);
int sselect_addwrite(sselect *ssel, int fd);
int sselect_delread(sselect *ssel, int fd);
int sselect_delwrite(sselect *ssel, int fd);
int sselect_wait(sslect *ssel, int ms);
int sselect_getread(sselect *ssel, int *fds, int sizefds);
int sselect_getwrite(sselect *ssel, int *fds, int sizefds);