Java非阻塞socket的flush操作

发布于 2024-10-04 08:40:36 字数 235 浏览 0 评论 0原文

在正常的阻塞套接字中,我可以使用 Socket.getOutputStream().flush() 来部分控制何时发送 TCP 数据包。 SocketChannel 是否有等效的操作?

编辑:我的猜测是,每次我调用 SocketChannel.write(ByteBuffer src) 时,至少会发送一个单独的数据包,即使缓冲区只有 1 个字节(假设 Nagle 关闭),我是对的吗?

编辑:包->包,抱歉拼写错误。

In normal blocking socket, I can use Socket.getOutputStream().flush() to partly control when to send out a TCP packet. Is there an equivalent operation for SocketChannel?

Edit: My guess is that every time I call SocketChannel.write(ByteBuffer src), at least one individual packet will be sent, even the buffer has only 1 byte(assume Nagle is off), am I right?

Edit: package -> packet, sorry for wrong spelling.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好久不见√ 2024-10-11 08:40:36

我想你可以写一些类似的内容

while (buf.hasRemaining()) {
    socketChan.write(buf);
}

也许有更好的解决方案。

I guess you could write something like

while (buf.hasRemaining()) {
    socketChan.write(buf);
}

Perhaps there is a better solution.

氛圍 2024-10-11 08:40:36

正如我最近指出的那样,Socket.getOutputStream().flush() 在 Sun 的 JDK 6 中不执行任何操作。

但是,不能保证 write() 会发送一个数据包(而不是数据包),它可以发送更多或更少的数据包。您所知道的是它已被传递给操作系统来处理它。

As I noted recently Socket.getOutputStream().flush() does nothing in Sun's JDK 6.

However, there is no guarentee that write() will send one packet (not package) it could send more or less. All you know is it has been passed to the OS to handle it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文