smbj icon indicating copy to clipboard operation
smbj copied to clipboard

Connection reset by peer: socket write error

Open cliviu opened this issue 6 years ago • 12 comments

After some session inactivity time (about 15 minutes), I got these stack traces in log. What can I do to avoid them ?

2018-07-19 10:09:02,647|PacketReader |INFO |PacketReader error, got exception. com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Connection reset at com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.doRead(DirectTcpPacketReader.java:53) at com.hierynomus.smbj.transport.PacketReader.readPacket(PacketReader.java:69) at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:47) at java.lang.Thread.run(Unknown Source) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.readFully(DirectTcpPacketReader.java:70) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.readTcpHeader(DirectTcpPacketReader.java:59) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.doRead(DirectTcpPacketReader.java:48) ... 3 more

2018-07-19 10:09:02,660|Session |ERROR|Caught exception while closing TreeConnect with id: 1 com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Connection reset by peer: socket write error at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:77) at com.hierynomus.smbj.connection.Connection.send(Connection.java:265) at com.hierynomus.smbj.session.Session.send(Session.java:262) at com.hierynomus.smbj.share.TreeConnect.close(TreeConnect.java:65) at com.hierynomus.smbj.share.Share.close(Share.java:91) at com.hierynomus.smbj.session.Session.logoff(Session.java:211) at com.hierynomus.smbj.session.Session.close(Session.java:244) at com.hierynomus.smbj.connection.Connection.close(Connection.java:136) at com.hierynomus.smbj.connection.Connection.close(Connection.java:121) at com.hierynomus.smbj.connection.Connection.handleError(Connection.java:428) at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:53) at java.lang.Thread.run(Unknown Source) Caused by: java.net.SocketException: Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at java.io.BufferedOutputStream.flushBuffer(Unknown Source) at java.io.BufferedOutputStream.flush(Unknown Source) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:74) ... 11 more 2018-07-19 10:09:02,660|Connection |WARN |Exception while closing session 1271036582559821 com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Connection reset by peer: socket write error at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:77) at com.hierynomus.smbj.connection.Connection.send(Connection.java:265) at com.hierynomus.smbj.session.Session.send(Session.java:262) at com.hierynomus.smbj.session.Session.logoff(Session.java:217) at com.hierynomus.smbj.session.Session.close(Session.java:244) at com.hierynomus.smbj.connection.Connection.close(Connection.java:136) at com.hierynomus.smbj.connection.Connection.close(Connection.java:121) at com.hierynomus.smbj.connection.Connection.handleError(Connection.java:428) at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:53) at java.lang.Thread.run(Unknown Source) Caused by: java.net.SocketException: Connection reset by peer: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(Unknown Source) at java.net.SocketOutputStream.write(Unknown Source) at java.io.BufferedOutputStream.flushBuffer(Unknown Source) at java.io.BufferedOutputStream.flush(Unknown Source) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:74) ... 9 more

cliviu avatar Jul 19 '18 10:07 cliviu

As far as I know - at least on windows based shares - there is a 15 minutes auto disconnect timeout for idle connections. To prevent the server to close your connection you could try to send keep alive (or echo) requests.

This should be possible by using SMB2Echo packets, which are already implemented in smbj.

neoxpert avatar Jul 22 '18 09:07 neoxpert

hi @neoxpert , do you know how to send SMB2Echo packets using the existing API ?

cliviu avatar Jul 23 '18 11:07 cliviu

Something like this should work, but I do not know if that is "the clean way".

SMB2Echo echo = new SMB2Echo(SMB2Dialect.SMB_2_0_2);

session.send(echo);

neoxpert avatar Jul 23 '18 19:07 neoxpert

I'll add a keepalive mechanism that can be configured (on/off)

hierynomus avatar Jul 23 '18 19:07 hierynomus

thanks !

cliviu avatar Jul 25 '18 07:07 cliviu

@hierynomus I think can easily send a PR for the Keepalive. Before I spend time on it, let me know if you have already done anything with it.

I was going to modify SMBConfig to allow for enabling/disabling keepalive with a default of disabled. Then modify the AsyncDirectTcpTransport and DirectTcpTransport constructors to include boolean soKeepalive and use .setOption to enable/disable keepalive.

Please let me know if you agree with the approach and if I am missing anywhere else in the code where keepalive needs to be set.

mtamassia avatar Sep 21 '18 06:09 mtamassia

@mtamassia @hierynomus did you work on this? we are getting bitten by this as well.

nddipiazza avatar Nov 29 '18 16:11 nddipiazza

Any updates on this issue? @hierynomus Is there any keepalive mechanism? What value should I give to timeouts that can be configured in SmbjConfig?

dharmesh-khandelwal avatar Nov 08 '19 13:11 dharmesh-khandelwal

So is this still in the works? @hierynomus

Flemoz avatar Apr 29 '20 08:04 Flemoz

@hierynomus Any updates on this issue , how to use keepalive mechanism, we are facing same issue.

SowjanyaKowkuntla avatar Oct 04 '21 15:10 SowjanyaKowkuntla

Anthing new on this ? we're facing the same issue: [2022-02-04T07:17:29,616] ERROR session.Session - Caught exception while closing TreeConnect with id: 1 com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Broken pipe (Write failed) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:71) ~[smbj-0.3.0.jar:?] at com.hierynomus.smbj.connection.Connection.send(Connection.java:240) ~[smbj-0.3.0.jar:?] at com.hierynomus.smbj.session.Session.send(Session.java:208) ~[smbj-0.3.0.jar:?] at com.hierynomus.smbj.share.TreeConnect.close(TreeConnect.java:61) ~[smbj-0.3.0.jar:?] at com.hierynomus.smbj.share.Share.close(Share.java:90) ~[smbj-0.3.0.jar:?] at com.hierynomus.smbj.session.Session.logoff(Session.java:157) [smbj-0.3.0.jar:?] at com.hierynomus.smbj.session.Session.close(Session.java:190) [smbj-0.3.0.jar:?] at com.hierynomus.smbj.connection.Connection.close(Connection.java:128) [smbj-0.3.0.jar:?] at com.hierynomus.smbj.connection.Connection.close(Connection.java:113) [smbj-0.3.0.jar:?] at com.hierynomus.smbj.connection.Connection.handleError(Connection.java:404) [smbj-0.3.0.jar:?] at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:53) [smbj-0.3.0.jar:?] at java.lang.Thread.run(Thread.java:834) [?:?] Caused by: java.net.SocketException: Broken pipe (Write failed) at java.net.SocketOutputStream.socketWrite0(Native Method) ~[?:?] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110) ~[?:?] at java.net.SocketOutputStream.write(SocketOutputStream.java:150) ~[?:?] at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81) ~[?:?] at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:142) ~[?:?] at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:69) ~[smbj-0.3.0.jar:?] ... 11 more

pts-aut avatar Feb 04 '22 07:02 pts-aut

Hello, Any updates on this issue? Facing the same problem :(.

Many thanks for the help.

vjorge avatar Mar 25 '22 08:03 vjorge