Запись в сокет Java зависает?
Один из моих исчерпывающих JUnit блокируется при записи в середине повторения.
Поток подобен пассивному поиску на FTP:
JUnit ----------- MOVE_REQ (dst port 4104) --------------------> Server
loop {
JUnit <------ SEND_REQ with the object (dst port 1104) ---------- Server
JUnit --------------- SEND_RSP (same connection) --------------> Server
}
JUnit <-------- MOVE_RSP (same connection as first one) ----------- Server
Вся эта цепочка выполняется JUnit одновременно в нескольких потоках одновременно. Сервер на стороне JUnit (тот, который посещает SEND_REQ) - это пул из 5 потоков, точно такой же, как сервер на другой стороне.
В отладке я вижу сервер, зависший с SEND_REQ в файле OutputStream.write размером 16384 байта. С другой стороны, сервер jUnit застрял, читая поток с InputStream.read всего 6 байтов.
Первое, что я подумал, было то, что я не закрывал все соединения, и поэтому у меня была какая-то утечка в буферах. Но я проверил это с TcpView, и это нормально, в то время есть только одно соединение:
Есть идеи, почему это может происходить?