【问题标题】:When the send operation is finished on non blocking socket?非阻塞套接字上的发送操作何时完成?
【发布时间】:2012-09-15 15:28:57
【问题描述】:

假设sock是一个以非阻塞模式打开并跟随函数的unix套接字

void send_int(int sock, int flags) {
    int x = 0xff;
    send(sock, &x, sizeof(int), flags);
}

这段代码“正确”吗?我不确定缓冲区(x)是否在发送返回之前被复制到某个发送缓冲区,或者sendsend_int 有可能返回得太早,然后按原样使用不存在的缓冲区仅在堆栈上...

【问题讨论】:

    标签: sockets nonblocking


    【解决方案1】:

    没有必要保留用户发送缓冲区,直到发送操作在非阻塞模式下完成。所以你的代码没问题。

    在内部,发送缓冲区被复制到套接字缓冲区 (SKB) 发送队列并复制到内核空间。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 2017-01-03
      • 1970-01-01
      • 2013-06-04
      相关资源
      最近更新 更多