import socket
import os
import sys
import struct
import time

s = socket.socketpair(socket.AF_UNIX, socket.SOCK_SEQPACKET)

pid = os.fork()

if pid == -1:
	print("fork() failed!")
	sys.exit()

if pid == 0:
	msg = b'test'
	print("parent: hello")
	s[1].close()
	ipc = s[0]
	f = open("/etc/passwd", "r")
	tmp = struct.pack("i", f.fileno());
	print("parent: sending message", msg, tmp)
	ret = ipc.sendmsg(msg, [(socket.SOL_SOCKET, socket.SCM_RIGHTS, tmp)], 0)
	print("parent:", ret)
	f.close()
else:
	print("child: hello")
	s[0].close()
	ipc = s[1]
	ret = ipc.recvmsg(10, 1000, 0)
	print("child:", ret)
	print("child: received message:", ret[0])
	f = os.fdopen(struct.unpack("i", ret[1][0][2])[0])
	arr = f.readlines()
	for i in arr:
		print("Read:", i, end='')
	f.close()
