PythonでUNIXドメインソケットを使ってみる

PythonUNIXドメインソケットを使ってみたメモ。ついでにプロキシ。

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!」と表示される。