Skip to content

Instantly share code, notes, and snippets.

@pts
Created February 2, 2017 15:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pts/62477ed265977bfb1a80de03b40b4aad to your computer and use it in GitHub Desktop.
Save pts/62477ed265977bfb1a80de03b40b4aad to your computer and use it in GitHub Desktop.
#! /usr/bin/python
import _multiprocessing
import os
import socket
import sys
import time
import thread
def handle_request(sock):
try:
req = ''
while 1:
data = sock.recv(2048)
if not data:
break
req += data
if '\n\r\n' in req or '\n\n' in req:
sock.sendall('HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\nHi!%s'
% time.time())
break
finally:
sock.close()
def handle_usock(usock):
try:
while 1:
s = usock.recv(1)
if not s:
break
assert s == 'S'
fd = _multiprocessing.recvfd(usock.fileno())
sock = socket.fromfd(fd, socket.AF_INET, socket.SOCK_STREAM, 0)
os.close(fd)
thread.start_new_thread(handle_request, (sock,))
finally:
usock.close()
def main(argv):
ussock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
ussock.bind('\0sendfd_demo')
ussock.listen(16)
while 1:
usock, addr = ussock.accept()
thread.start_new_thread(handle_usock, (usock,))
if __name__ == '__main__':
sys.exit(main(sys.argv))
#! /usr/bin/python
import _multiprocessing
import socket
import sys
def main(argv):
ssock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
ssock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
ssock.bind(('127.0.0.1', 54333))
ssock.listen(16)
usock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0)
usock.connect('\0sendfd_demo')
while 1:
sock, addr = ssock.accept()
usock.sendall('S')
_multiprocessing.sendfd(usock.fileno(), sock.fileno())
sock.close()
if __name__ == '__main__':
sys.exit(main(sys.argv))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment