blocking socket library with SSL, SOCKS/HTTP proxy chaining, and timeout
rocksock is a powerful (mostly) blocking networking library written in C. it was designed for small size, robustness, simplicity, static linking and fine-grained error reporting and configurability. programming in a blocking way is much simpler, but can lead to near infinite blocking. rocksock addresses this by providing timeouts so the app doesn't get into a completely blocked state and can react properly on any exceptional condition. making the app fit for SSL only requires enabling one flag, and SOCKS/HTTP proxy support is built-in as well.
build:
for a "default" build, for example for a distribution, just use ./configure && make as usual.
advanced/customized build using RcB:
write your app, include the rocksock header using a relative pathname, and then use the build tool rcb on your main C file, supplying all config options as CFLAGS. rcb will then automatically find all required translation units and throw them at once at the compiler, giving perfect opportunities for link-time optimization.
typical tree structure:
myapp/
rocksock/
lib/ (libulz)
myapp/main.c:
/* tiny program to see if a specific port on a specific host
is open for usage in shellscripts or similar. */
#include "../rocksock/rocksock.h"
#include <stdio.h>
#include <stdlib.h>
static void usage(void) {
dprintf(2, "usage: prog ip port\n");
exit(1);
}
int main(int argc, char** argv) {
if(argc != 3) usage();
rocksock s;
rocksock_init(&s);
rocksock_set_timeout(&s, 5000);
int ret = rocksock_connect(&s, argv[1], atoi(argv[2]), 0);
rocksock_clear(&s);
return ret;
}
$ cd myapp
$ CFLAGS="-DUSE_SSL -flto -O3 -s -static" rcb main.c