Java TCP套接字随机抛出SocketException:sendto失败:EBADF(错误的文件描述符)

Java TCP套接字随机抛出SocketException:sendto失败:EBADF(错误的文件描述符),java,android,sockets,tcp,Java,Android,Sockets,Tcp,我的应用程序中有一个TCP套接字。此时它唯一的功能是定期发送一个数据包以保持与服务器的连接。成功连接后,我的循环是: while (running) { outputStream.write(0x00); outputStream.flush(); Thread.sleep(5000 + random.nextInt(5000)); } 但是,write方法有时明显随机抛出以下异常: java.net.SocketException: sendto failed: EB

我的应用程序中有一个TCP套接字。此时它唯一的功能是定期发送一个数据包以保持与服务器的连接。成功连接后,我的循环是:

while (running) {
    outputStream.write(0x00);
    outputStream.flush();
    Thread.sleep(5000 + random.nextInt(5000));
}
但是,
write
方法有时明显随机抛出以下异常:

java.net.SocketException: sendto failed: EBADF (Bad file descriptor)
    at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:542)
    at libcore.io.IoBridge.sendto(IoBridge.java:511)
    at java.net.PlainSocketImpl.write(PlainSocketImpl.java:500)
    at java.net.PlainSocketImpl.-wrap1(PlainSocketImpl.java)
    at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:266)
    at java.io.OutputStream.write(OutputStream.java:82)
    at libcore.io.Streams.writeSingleByte(Streams.java:53)
    at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:262)
    at myapp.Service$TCPClient.run(Service.java:174)
    at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: sendto failed: EBADF (Bad file descriptor)
    at libcore.io.Posix.sendtoBytes(Native Method)
    at libcore.io.Posix.sendto(Posix.java:211)
    at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:278)
    at libcore.io.IoBridge.sendto(IoBridge.java:509)
... 8 more
我无法复制错误,它只是偶尔发生。在下一次迭代中,服务器成功地发送和接收数据包。始终建立连接


这是什么原因造成的?如何修复?

这是Android平台中的一个错误。@EJP您能提供一些源代码吗?我在AOSP问题跟踪程序中没有看到任何内容。