Skip to content
/ fnet.c Public

Simple C networking library

Notifications You must be signed in to change notification settings

finwo/fnet.c

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fnet

Installation

The easiest way to add fnet to your project is to use dep to install it as a dependency, ensure you include lib/.dep/config.mk in your makefile, and add #include "finwo/fnet.h" in the files where you're using it.

dep add finwo/fnet

Usage

Connect to remote

#include <string.h>
#include "finwo/fnet.h"
#include "tidwall/buf.h"

void onData(struct fnet_ev *ev) {
  printf("Data received: %s\n", ev->buffer->data);
}

void onTick(struct fnet_ev *ev) {
  const char *data = "Hello world!";
  int cnt = *((int*)ev->udata);

  fnet_write(ev->connection, &((struct buf){
    .len  = strlen(data) + 1,
    .data = data,
  }));

  cnt++;
  *((int*)ev->udata) = cnt;
  if (cnt > 10) {
    fnet_close(ev->connection);
    exit(0);
  }
}

int main() {
  int cnt = 0;

  fnet_connect(addr, port, &((struct fnet_options_t){
    .proto     = FNET_PROTO_TCP,
    .flags     = 0,
    .onConnect = NULL,
    .onData    = onData,
    .onTick    = onTick,
    .onClose   = NULL,
    .udata     = &cnt,
  }));

  fnet_main();
  return 0;
}

Listen for connections

#include "finwo/fnet.h"

// Just an echo
void onData(struct fnet_ev *ev) {
  fnet_write(ev->connection, ev->buffer);
}

// Attach our onData to the connection
void onConnect(struct fnet_ev *ev) {
  ev->connection->onData  = onData;
}

int main() {
    fnet_listen("0.0.0.0", 80, &((struct fnet_options_t){
        .proto     = FNET_PROTO_TCP,
        .flags     = 0,
        .onConnect = onConnect,
        .onData    = NULL,
        .onTick    = NULL,
        .onClose   = NULL,
        .udata     = NULL,
    }));

    fnet_main();
    return 0;
}