postuf / socks-proxy-async
Lightweight asynchronous socks proxy for PHP
Installs: 9 755
Dependents: 1
Suggesters: 0
Security: 0
Stars: 4
Watchers: 2
Forks: 8
Open Issues: 1
pkg:composer/postuf/socks-proxy-async
Requires
- php: ^8.0
 - ext-sockets: *
 
Requires (Dev)
- doctrine/coding-standard: ^9.0
 - phpstan/phpstan: ^0.12.86
 - phpunit/phpunit: ^9.0
 - psalm/phar: ^4.7
 - squizlabs/php_codesniffer: ^3.6
 
This package is auto-updated.
Last update: 2025-10-16 08:06:39 UTC
README
Asynchronous SOCKS5 client library
Requirements
- PHP 7.4+
 - Composer
- ext-sockets
 
 
Quick start
First of all, add library to your app user composer:
composer require postuf/socks-proxy-async
How it works
Say, you have a socket and an event loop:
$socket = new SocketAsync(/* ... */);
while(true) {
  // process events
  if (!$socket->ready()) {
    $socket->poll();
  } else {
    // your logic ...
  }
}
We create socket, set socket_set_nonblock, when socket is connected, isReady flag is set.
Internal logic is organized as state machine. You can extend it and add more steps, so that only $socket->poll() is called on event loop, then you just check the state and process received updates.
Testing
Tests require working proxy and http server to be up and running, use node/proxy.js to start proxy, node/http/start.sh (./start.sh within its subdir) to start http server.
By default, http server runs on port 8080, proxy occupies port 1080, tests use these ports.
DNS-related tests require dns server (node/named.js) to be up and running.
Make commands
- 
make all - run all checks
 - 
make test - run tests
 - 
make cs - run codesniffer checks
 - 
make psalm - run psalm checks
 - 
make stan - run stan checks
 - 
make cs - run stan and psalm checks
 - 
make get-security - get security checker
 - 
make security - run security checker