【问题标题】:read return 1 when reading from a socket even it read more从套接字读取时读取返回 1,即使它读取更多
【发布时间】:2014-03-31 08:21:01
【问题描述】:

当我像这样从 SOCK_STREAM 套接字读取时:

int t;
while ((t = read(clientsocket, buff, 128) > 0))
{
  write(1, buff, t);
}

read 总是返回 1,但是如果我用 gdb 查看 buff,我可以看到我发送的整行。 我正在使用 netcat 向服务器发送数据。

【问题讨论】:

  • 我是一位经验丰富的 C 程序员,但我遇到了同样的问题——只是左括号放错了两个符号。我花了一个小时来调试:)

标签: c linux sockets netcat


【解决方案1】:

由于operator precedence,这是不正确的:

while ((t = read(clientsocket, buff, 128) > 0))

并导致t 被分配read(clientsocket, buff, 128) > 0 的结果,这将是01

要更正,请改为:

while ((t = read(clientsocket, buff, 128)) > 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2011-10-29
    • 2021-01-23
    • 2018-11-19
    相关资源
    最近更新 更多