我正在浏览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缓冲区以容纳更多字节,因此我们不会因部分发送而返回。