Skip to content
This repository was archived by the owner on Aug 8, 2018. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pyethapp/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import ethereum.slogging as slogging
import config as konfig
from db_service import DBService
from jsonrpc import JSONRPCServer
from jsonrpc import JSONRPCServer, IPCRPCServer
from pow_service import PoWService
from accounts import AccountsService, Account
from pyethapp import __version__
Expand All @@ -36,7 +36,7 @@


services = [DBService, AccountsService, NodeDiscovery, PeerManager, ChainService, PoWService,
JSONRPCServer, Console]
JSONRPCServer, IPCRPCServer, Console]


class EthApp(BaseApp):
Expand Down
76 changes: 76 additions & 0 deletions pyethapp/ipc_rpc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/usr/bin/env python
"""Derived from https://groups.google.com/d/topic/gevent/5__B9hOup38/discussion
"""
import _socket
import os
import pwd
from gevent.server import StreamServer
import tempfile


def unlink(path):
from errno import ENOENT
try:
os.unlink(path)
except OSError, ex:
if ex.errno != ENOENT:
raise


def link(src, dest):
from errno import ENOENT
try:
os.link(src, dest)
except OSError, ex:
if ex.errno != ENOENT:
raise


def bind_unix_listener(path, backlog=50, user=None):
pid = os.getpid()
tempname = '%s.%s.tmp' % (path, pid)
backname = '%s.%s.bak' % (path, pid)
unlink(tempname)
unlink(backname)
link(path, backname)
try:
sock = _socket.socket(_socket.AF_UNIX, _socket.SOCK_STREAM)
sock.setblocking(0)
sock.bind(tempname)
try:

if user is not None:
user = pwd.getpwnam(user)
os.chown(tempname, user.pw_uid, user.pw_gid)
os.chmod(tempname, 0600)
sock.listen(backlog)
try:
os.rename(tempname, path)
except:
os.rename(backname, path)
backname = None
raise
tempname = None
return sock
finally:
if tempname is not None:
unlink(tempname)
finally:
if backname is not None:
unlink(backname)


def handle(socket, address):
print socket, address
print socket.recv(4096)
socket.sendall('pong\n')


def serve(sock, handler=handle):
StreamServer(sock, handler).serve_forever()

if __name__ == "__main__":
path = os.path.join(tempfile.gettempdir(), "echo.ipc")
print "Starting echo sever..."
print "Test it with:\n\techo 'ping'| socat - {}".format(path)
serve(bind_unix_listener(path))
Loading