在发生故障时重新发送TCP套接字上的数据

时间:2018-05-15 04:55:57

标签: linux tcp network-programming send blocking

我正在浏览iscsi的现有tcp发送实现。

int iscsit_send_tx_data(
    struct iscsi_cmd *cmd,
    struct iscsi_conn *conn,
    int use_misc)
{
    int tx_sent, tx_size;
    u32 iov_count;
    struct kvec *iov;

send_data:
    tx_size = cmd->tx_size;

    if (!use_misc) {
        iov = &cmd->iov_data[0];
        iov_count = cmd->iov_data_count;
    } else {
        iov = &cmd->iov_misc[0];
        iov_count = cmd->iov_misc_count;
    }

    tx_sent = tx_data(conn, &iov[0], iov_count, tx_size);
    if (tx_size != tx_sent) {
        if (tx_sent == -EAGAIN) {
            pr_err("tx_data() returned -EAGAIN\n");
            goto send_data;
        } else
            return -1;
    }
    cmd->tx_size = 0;

    return 0;
}

下面,

如果tx_size != tx_sent(包括tx_sent < 0 tx_sent == 0 and tx_sent < tx_size等条件),以及tx_sent == -EAGAIN 然后我们重新发送数据。

如果tx_sent&lt;可以重新发送剩余数据吗? tx_size但tx_sent&gt;假设由于空间不足,呼叫立即返回。

处理此部分数据发送案例的理想步骤应该是什么。

我们可以增加发送TCP缓冲区以容纳更多字节,因此我们不会因部分发送而返回。

0 个答案:

没有答案