【问题标题】:socket error in send() -- No such file or directorysend() 中的套接字错误——没有这样的文件或目录
【发布时间】:2026-02-18 04:55:02
【问题描述】:
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

【问题讨论】:

  • 本页讨论 connect() 错误——我在尝试发送数据时遇到问题。我的连接成功。也发送运行良好的初始但一段时间后。我开始面临这个错误

标签: sockets send errno


【解决方案1】:

如果send() 实际上发送的字节数较少,这还不是失败。我想你的errno 发生得更早。

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

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

您只应在i4RetVal &lt; 0 时检查错误。

【讨论】:

  • 我观察到一种奇怪的行为。输出显示有时我得到 i4RetVal = -1 并且在某些地方 i4RetVal 为正但仍小于 u2BufLen
  • 如前所述,“i4RetVal 为正,但仍低于 u2BufLen”并不奇怪——事情就是这样发生的。
最近更新 更多