import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

public class ReadTimeoutTest {
	public static void main(String[] args) throws Exception {

		boolean passed = false;

		// Set up the environment for creating the initial context
		Hashtable env = new Hashtable(11);
		env
		.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.ldap.LdapCtxFactory");
		env.put("com.sun.jndi.ldap.read.timeout", "1000");
		env.put(Context.PROVIDER_URL, "ldap://localhost:2001");

		Server s = new Server();

		try {

			// start the server
			s.start();

			// Create initial context
			DirContext ctx = new InitialDirContext(env);
			System.out.println("LDAP Client: Connected to the Server");

			// Close the context when we're done
			ctx.close();
		} catch (NamingException e) {
			e.printStackTrace();
		}
		s.interrupt();
	}

	static class Server extends Thread {

		static int serverPort = 2001;

		Server() {
		}

		public void run() {
			try {
				ServerSocket serverSock = new ServerSocket(serverPort);
				Socket socket = serverSock.accept();
				System.out.println("Server: Connection accepted");

				BufferedInputStream bin = new BufferedInputStream(socket
						.getInputStream());
				while (true) {
					bin.read();
				}
			} catch (IOException e) {
				// ignore
			}
		}
	}
}
