An extensible server implementation
git clone git@soophie.de:/srv/git/so-sock
An extensible server implementation
...
sudo make install
#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;
}