def tester(): # need simultaneous communication... emultimer.createthread(helper) emultimer.sleep(0.1) lind_test_server.send_syscall(sockets[1], "SocketPair test.", 0) msg = None msg = lind_test_server.recv_syscall(sockets[1], 1024, 0) assert msg != None, "Sockpair recv failed in tester..." emultimer.sleep(0.1) lind_test_server.close_syscall(sockets[1]) lind_test_server.close_syscall(sockets[0]) return
# I'll listen, accept, and connect... serversockfd = lind_test_server.socket_syscall(AF_INET, SOCK_STREAM, 0) clientsockfd = lind_test_server.socket_syscall(AF_INET, SOCK_STREAM, 0) # bind to a socket lind_test_server.bind_syscall(serversockfd,'127.0.0.1',50300) lind_test_server.listen_syscall(serversockfd,10) def do_server(): newsocketfd = lind_test_server.accept_syscall(serversockfd) createthread(do_server) # wait for the server to run... sleep(.1) # should be okay... lind_test_server.connect_syscall(clientsockfd,'127.0.0.1',50300) assert(lind_test_server.getpeername_syscall(clientsockfd) == ('127.0.0.1',50300))
#Process fourth test... try: msg = lind_test_server.recvfrom_syscall(newsockfd, 100, MSG_PEEK) assert len(msg[2]) == 50, "Length expected 50 bytes to peek, but only" \ + " got " + str(len(msg[2])) + " bytes." except Exception, e: print 'Test:- W:100 P:50 : ', e #Gracefully close the socket lind_test_server.close_syscall(newsockfd) #Run the server in a seperate thread, since client/server should be started #simultaneously. emultimer.createthread(process_request) #connect to server lind_test_server.connect_syscall(clientsockfd, '127.0.0.1', 50300) #send each test with some delay, so that server processes each test cleanly. lind_test_server.send_syscall(clientsockfd, "A" * 100, 0) emultimer.sleep(0.1) lind_test_server.send_syscall(clientsockfd, "A" * 100, 0) emultimer.sleep(0.1) lind_test_server.send_syscall(clientsockfd, "A" * 100, 0) emultimer.sleep(0.1) lind_test_server.send_syscall(clientsockfd, "A" * 50, 0) emultimer.sleep(0.1) lind_test_server.close_syscall(clientsockfd)
assert lind_test_server.read_syscall(sock, 4) == "test", \ "Failed to read from a file..." #test for file finished, remove from polling. to_go = [x for x in polled if x['fd'] == sock] map(polled.remove, to_go) else: lind_test_server.send_syscall(sock, data, 0) #Data is sent out of this socket, it's no longer ready for writing, #modify it only read mode. [x for x in polled if x['fd'] == sock][0]['events'] = \ lind_test_server.POLLIN lind_test_server.close_syscall(serversockfd) #Thread for running server ... emultimer.createthread(process_request) emultimer.sleep(1) def client1(): """ <Purpose> Thread for client 1 to connect to server, and send/recv data... """ lind_test_server.connect_syscall(clientsockfd, '127.0.0.1', 50300) lind_test_server.send_syscall(clientsockfd, "test", 0) #Short sleeps are not working, give enough time... emultimer.sleep(1) assert lind_test_server.recv_syscall(clientsockfd, 100, 0) == "test", \ "Write failed in select while processing client 1..."
# let's do a few basic things with connect. This will be UDP only for now... listensockfd = lind_test_server.socket_syscall(AF_INET, SOCK_DGRAM, 0) sendsockfd = lind_test_server.socket_syscall(AF_INET, SOCK_DGRAM, 0) def recvmessages(): # let's wait for packets here... lind_test_server.bind_syscall(listensockfd,'127.0.0.1',50102) assert lind_test_server.recv_syscall(listensockfd,10000,0) == 'test',\ "UDP recv test 1 failed." lind_test_server.recv_syscall(listensockfd,10000,0) == 'test2',\ "UDP recv test 2 failed." # I need a thread... createthread(recvmessages) # let's wait for it to start... sleep(.1) # send a message lind_test_server.sendto_syscall(sendsockfd,'test','127.0.0.1',50102,0) # get another socket, bind and then send sendsockfd2 = lind_test_server.socket_syscall(AF_INET, SOCK_DGRAM, 0) lind_test_server.bind_syscall(sendsockfd2,'127.0.0.1',50992) lind_test_server.sendto_syscall(sendsockfd2,'test2','127.0.0.1',50102,0) sleep(0.1) lind_test_server.close_syscall(sendsockfd2) lind_test_server.close_syscall(sendsockfd)