dyad

Asynchronous networking for C

Github stars Tracking Chart

dyad.c

Overview

Dyad.c is an asynchronous networking library which aims to be lightweight,
portable and easy to use. It can be used both to create small standalone
servers and to provide network support to existing projects.

Getting started

The dyad.c and dyad.h files can be
dropped into an existing project; if you're using Windows you will also have to
link to ws2_32.

An overview of the API can be found at doc/api.md.

Usage examples can be found at example/.

Server example

A simple server which listens on port 8000 and echoes whatever is sent to it:

#include <stdlib.h>
#include "dyad.h"

static void onData(dyad_Event *e) {
  dyad_write(e->stream, e->data, e->size);
}

static void onAccept(dyad_Event *e) {
  dyad_addListener(e->remote, DYAD_EVENT_DATA, onData, NULL);
  dyad_writef(e->remote, "Echo server\r\n");
}

int main(void) {
  dyad_init();

  dyad_Stream *serv = dyad_newStream();
  dyad_addListener(serv, DYAD_EVENT_ACCEPT, onAccept, NULL);
  dyad_listen(serv, 8000);

  while (dyad_getStreamCount() > 0) {
    dyad_update();
  }

  dyad_shutdown();
  return 0;
}

Client example

A simple example program which connects to a
daytime server and prints the
response:

#include <stdio.h>
#include "dyad.h"

static void onConnect(dyad_Event *e) {
  printf("connected: %s\n", e->msg);
}

static void onData(dyad_Event *e) {
  printf("%s", e->data);
}

int main(void) {
  dyad_init();

  dyad_Stream *s = dyad_newStream();
  dyad_addListener(s, DYAD_EVENT_CONNECT, onConnect, NULL);
  dyad_addListener(s, DYAD_EVENT_DATA,    onData,    NULL);
  dyad_connect(s, "time-nw.nist.gov", 13);

  while (dyad_getStreamCount() > 0) {
    dyad_update();
  }
  
  dyad_shutdown();
  return 0;
}

License

This library is free software; you can redistribute it and/or modify it under
the terms of the MIT license. See LICENSE for details.

Main metrics

Overview
Name With Ownerrxi/dyad
Primary LanguageC
Program languagePython (Language Count: 2)
Platform
License:MIT License
所有者活动
Created At2014-08-03 19:00:04
Pushed At2020-10-06 10:51:15
Last Commit At2016-08-28 10:57:21
Release Count0
用户参与
Stargazers Count1.4k
Watchers Count70
Fork Count223
Commits Count66
Has Issues Enabled
Issues Count20
Issue Open Count12
Pull Requests Count4
Pull Requests Open Count4
Pull Requests Close Count4
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private