4
if (fcntl (i4SockDesc, F_SETFL, O_NONBLOCK) < 0)
{
    printf(LDP_IF_MISC, "LDPTCP: Client : Can't Set Sckt in NON BLK\n");
    return CONNECT_FAIL;
}

i4RetVal = send (i4SockDesc, (UINT1 *) pu1Data, u2BufLen, MSG_NOSIGNAL);
if (i4RetVal != u2BufLen)
{
    perror("Socket send failure!!\n");
    printf(i4SockDesc = %d, u2BufLen = %d, i4RetVal = %d\n", i4SockDesc, u2BufLen, i4RetVal);
    printf("Socket send Failure: %s, errno = %d\n",strerror(errno), errno);
}

send() 调用失败,错误为“没有这样的文件或目录”errno = 2。

i4SockDesc = 90, u2BufLen = 100, i4RetVal = -1
Socket send Failure: No such file or directory, errno = 2
4

1 回答 1

2

send()如果实际发送的字节数较少,则还不是失败。我想你errno之前发生的。

如果i4RetVal < u2BufLen您应该在将“发送光标”前进i4RetVal并减少相同数量的 buf 长度(更好:要发送的长度)之后继续发送。

继续这样做,直到您真正发送了所有内容。

您只应在i4RetVal < 0.

于 2013-05-17T09:16:05.423 回答