so://phie

HomeGitCV

so-sock

An extensible server implementation

git clone git@soophie.de:/srv/git/so-sock

so/sock

An extensible server implementation

...

Installation

sudo make install

Usage

#include <errno.h>

#define SO_SOCK_IMPL
#include <so/sock.h>

#define HOST "0.0.0.0"
#define PORT 23
#define MESSAGE_SIZE 500

sock_err_t on_handle(sock_t *sock, sock_conn_t *conn) {
  char buffer[MESSAGE_SIZE];
  while (!sock->quit) {
    ssize_t read = sock_read(conn, buffer, sizeof(buffer) - 1);
    if (read == 0) {
      break;
    }
    if (read < 0) {
      if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) {
        continue;
      }
      break;
    }
    buffer[read] = '\0';
    printf("%s", buffer);
    sock_write(conn, buffer, read);
  }
  return SOCK_ERR_OK;
}

int main(void) {
  sock_t *sock = sock_init();
  sock_on_global(sock, on_handle);
  sock_err_t err = sock_bind_listen(sock, HOST, PORT);
  if (err == SOCK_ERR_OK) {
    printf("server is running on %s:%d\n", HOST, PORT);
    pause();
    sock_close(sock);
  }
  else {
    printf("failed to start server on %s:%d\n", HOST, PORT);
  }
  printf("server stopped\n");
  sock_cleanup(sock);
  return 0;
}