PythonでUNIXドメインソケットを使ってみたメモ。ついでにプロキシ。
server.py
import os import socket SOCK_FILENAME = '/tmp/my_unix_socket' content = 'HTTP/1.0 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 12\r\n\r\nHello world!' def main(): s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s.bind(SOCK_FILENAME) s.listen(1) try: while True: conn, addr = s.accept() print '---connected---' try: while True: data = conn.recv(1024) print data print '-------------------------' conn.send(content) finally: conn.close() os.remove(SOCK_FILENAME) except KeyboardInterrupt: pass if __name__ == '__main__': main()
proxy.py
import socket SOCK_FILENAME = '/tmp/my_unix_socket' def main(): s_srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s_cli = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) s_cli.connect(SOCK_FILENAME) s_srv.bind(('0.0.0.0', 8000)) s_srv.listen(1) try: try: while True: conn, addr = s_srv.accept() print '---connected---' data = conn.recv(1024) print data print '-----client------' # proxy client s_cli.send(data) content = s_cli.recv(1024) print content print '-----proxy-------' conn.send(content) conn.close() finally: s_cli.close() except KeyboardInterrupt: pass if __name__ == '__main__': main()
server.py -> proxy.py の順で起動する。Webブラウザで8000番ポートにつなぐと「Hello world!」と表示される。