[jcifs] socket connection timed out error under load

Jonas Partner jpartner at smartner.com
Fri Jul 16 12:52:36 GMT 2004


Hi
I am using 0.9.5 and have been getting the following stack trace after a prolonged period of usage browsing
and downloading files from a share.  The code below reproduces this problem even using a single thread after
a few hundred requests.  After some investigation I have found that the failure is immediately preceded by a call to NbtSocket close() stack dump below and that the socket and output stream are both null by the time that
the below excpetion is thrown.  I am guessing this a synchronization issue with the sockets, could anyone 
suggest why this may be occurring ?

Regards

Jonas Partner   


Exception
jcifs.smb.SmbException: An error occured sending the request.
java.net.ConnectException: Connection timed out: connect
	at java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.net.PlainSocketImpl.doConnect(Unknown Source)
	at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at jcifs.netbios.NbtSocket.<init>(NbtSocket.java:60)
	at jcifs.smb.SmbTransport.ensureOpen(SmbTransport.java:275)
	at jcifs.smb.SmbTransport.send(SmbTransport.java:602)
	at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:847)
	at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119)
	at jcifs.smb.SmbFile.connect(SmbFile.java:790)
	at jcifs.smb.SmbFile.connect0(SmbFile.java:760)
	at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:630)
	at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1662)
	at jcifs.smb.SmbFile.listFiles(SmbFile.java:1553)
	at jcifs.smb.SmbFile.listFiles(SmbFile.java:1461)
	at org.jpartner.jcifs.test.JcifSocketErrorCase$ThreadRequestor.run(JcifSocketErrorCase.java:56)


Stack Dump

java.lang.Exception: Stack trace
	at java.lang.Thread.dumpStack(Unknown Source)
	at jcifs.netbios.NbtSocket.close(NbtSocket.java:130)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at jcifs.netbios.NbtSocket.<init>(NbtSocket.java:60)
	at jcifs.smb.SmbTransport.ensureOpen(SmbTransport.java:275)
	at jcifs.smb.SmbTransport.send(SmbTransport.java:602)
	at jcifs.smb.SmbTransport.negotiate(SmbTransport.java:847)
	at jcifs.smb.SmbTree.treeConnect(SmbTree.java:119)
	at jcifs.smb.SmbFile.connect(SmbFile.java:790)
	at jcifs.smb.SmbFile.connect0(SmbFile.java:760)
	at jcifs.smb.SmbFile.sendTransaction(SmbFile.java:630)
	at jcifs.smb.SmbFile.doFindFirstNext(SmbFile.java:1662)
	at jcifs.smb.SmbFile.listFiles(SmbFile.java:1553)
	at jcifs.smb.SmbFile.listFiles(SmbFile.java:1461)


package org.jpartner.jcifs.test;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Random;


import jcifs.smb.SmbFile;

public class JcifSocketErrorCase {

        
    public static void main(String[] args) throws Exception {
        java.util.List threadList = new ArrayList();
        JcifSocketErrorCase test = new JcifSocketErrorCase();
        Random rand = new Random();
        for (int counter = 0; counter < 1; counter++) {
            ThreadRequestor requestor = test.new ThreadRequestor();
            threadList.add(requestor);
            Thread.sleep((int) (rand.nextFloat() * 1000));
            requestor.start();
            System.out.println("started requestor");
        }

        boolean allFinished = false;
        while (!allFinished) {
            allFinished = true;
            for (int i = 0; i < threadList.size(); i++) {
                ThreadRequestor req = (ThreadRequestor) threadList.get(i);
                if (req.isAlive())
                    allFinished = false;
            }
            try {
                Thread.sleep(5000);
            } catch (InterruptedException intE) {
                intE.printStackTrace();
            }
            System.out.println("all finished " + allFinished);
        }
    }

    
    public class ThreadRequestor extends Thread {

        public void run() {
            for (int counter = 0; counter < 100; counter++) {
                try {
                    Random rand = new Random(System.currentTimeMillis());
                    SmbFile file = null;
                    file = new SmbFile(
                            "smb://domain;uname:password@Server/Share/Folder/");
                    SmbFile[] files = file.listFiles();
                    for (int i = 0; i < files.length; i++) {
                        if (files[i].isFile() && files[i].canRead()) {
                            InputStream in = files[i].getInputStream();
                            byte[] data = new byte[1024];
                            int read = 1;
                            while (read > 0) {
                                read = in.read(data);
                            }
                            in.close();
                        }
                    }
                    try {
                        Thread.sleep((int) (rand.nextFloat() * 1000 * 10));
                    } catch (InterruptedException intE) {
                        intE.printStackTrace();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}



More information about the jcifs mailing list