text: /* tcp.h
   * By Ron
   * Created August, 2008
   *
   * (See LICENSE.md)
   *
   * Platform-independent module for creating/sending TCP sockets for IPv4 TCP
   * connections.
   */
  
  #ifndef __TCP_H__
  #define __TCP_H__
  
  #include "types.h"
  
  /* Must be called before any other functions. */
  void winsock_initialize();
  
  /* Connect to the remote server on the given port. Prints an error to the screen and
   * returns -1 if it fails; otherwise, returns the new socket. */
  int    tcp_connect(char *host, uint16_t port);
  
  /* The same as tcp_connect, except it lets the user choose a non-blocking
   * socket. */
  int tcp_connect_options(char *host, uint16_t port, int non_blocking);
  
  /* Set a socket as non-blocking. */
  void   tcp_set_nonblocking(int s);
  
  /* Puts a socket into listening mode on the given address (use '0.0.0.0' for any).
   * Returns -1 on an error, or the socket if successful. */
  int    tcp_listen(char *address, uint16_t port);
  
  /* Accepts a connection on a listening socket. Returns the new socket if successful
   * or -1 if fails. */
  int    tcp_accept(int listen, char **address, uint16_t *port);
  
  /* Send data over the socket. Can use built-in IO functions, too. */
  ssize_t tcp_send(int s, void *data, size_t length);
  
  /* Receive data from the socket. Can use built-in IO functions, too. */
  ssize_t tcp_recv(int s, void *buffer, size_t buffer_length);
  
  /* Close the socket. */
  int    tcp_close(int s);
  
  #endif
  