Skip to content

Commit 228922a

Browse files
authored
Merge pull request qwj#51 from mosajjal/master
added daemon and uvloop
2 parents 73b2577 + 5427afb commit 228922a

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

pproxy/server.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,21 @@ async def test_url(url, rserver):
500500
print(f'============ success ============')
501501

502502
def main():
503+
import importlib
504+
uvloop_exists = importlib.util.find_spec("uvloop")
505+
c_crypto_exists = importlib.util.find_spec("Crypto")
506+
507+
# Try to use uvloop instead of the default event loop
508+
if uvloop_exists:
509+
import uvloop
510+
uvloop.install()
511+
print("Using uvloop")
512+
else:
513+
print("Using default event loop")
514+
515+
if c_crypto_exists:
516+
print("Using optimized C ciphers")
517+
503518
parser = argparse.ArgumentParser(description=__description__+'\nSupported protocols: http,socks4,socks5,shadowsocks,shadowsocksr,redirect,pf,tunnel', epilog=f'Online help: <{__url__}>')
504519
parser.add_argument('-l', dest='listen', default=[], action='append', type=ProxyURI.compile, help='tcp server uri (default: http+socks4+socks5://:8080/)')
505520
parser.add_argument('-r', dest='rserver', default=[], action='append', type=ProxyURI.compile_relay, help='tcp remote server uri (default: direct)')
@@ -515,6 +530,7 @@ def main():
515530
parser.add_argument('--auth', dest='authtime', type=int, default=86400*30, help='re-auth time interval for same ip (default: 86400*30)')
516531
parser.add_argument('--sys', action='store_true', help='change system proxy setting (mac, windows)')
517532
parser.add_argument('--reuse', dest='ruport', action='store_true', help='set SO_REUSEPORT (Linux only)')
533+
parser.add_argument('--daemon', dest='daemon', action='store_true', help='run as a daemon (Linux only)')
518534
parser.add_argument('--test', help='test this url for all remote proxies and exit')
519535
parser.add_argument('--version', action='version', version=f'%(prog)s {__version__}')
520536
args = parser.parse_args()
@@ -544,6 +560,14 @@ def main():
544560
elif any(map(lambda o: o.sslclient, args.listen)):
545561
print('You must specify --ssl to listen in ssl mode')
546562
return
563+
if args.daemon:
564+
try:
565+
import daemon
566+
except:
567+
print("Missing library: pip install python-daemon")
568+
exit(-1)
569+
_daemon = daemon.DaemonContext()
570+
_daemon.open()
547571
loop = asyncio.get_event_loop()
548572
if args.v:
549573
from . import verbose

setup.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,14 @@ def find_value(name):
3838
extras_require = {
3939
'accelerated': [
4040
'pycryptodome >= 3.7.2',
41+
'uvloop >= 0.13.0'
4142
],
4243
'sshtunnel': [
4344
'asyncssh >= 1.16.0',
4445
],
46+
'daemon': [
47+
'python-daemon >= 2.2.3',
48+
]
4549
},
4650
install_requires = [],
4751
entry_points = {

0 commit comments

Comments
 (0)