В рамках моего проекта с открытым исходным кодом BadVPN я разработал основанную на событиях (однопоточную) платформу сетевого кроссплатформенного программирования для языка Си. Он использует epoll в Linux и IOCP в Windows.
Некоторые важные части:
Он интенсивно использует потоковое программирование . Например, BConnection, абстракция TCP, использует StreamPassInterface и StreamRecvInterface универсальные интерфейсы потокового ввода-вывода. Это очень полезно; например, если вам нужно добавить поддержку SSL в ваше приложение, вам потребуется немного больше, чем бросить объект BSSLConnection поверх BConnection.
Хотя большая часть фреймворка хорошо документирована, я пока не предоставляю никаких руководств по его использованию. Вы можете использовать эту базовую программу в качестве отправной точки. Хотя программа tun2socks и не предназначена для обучения, она может оказаться полезной, в особенности сопровождающая меньшая программа udpgw.
Поскольку вы упомянули SOCKS, в моей структуре я также реализовал очень простой клиент SOCKS5 (без аутентификации и т. Д.), Который используется tun2socks.