从套接字读取时读取返回1,即使它读取更多

izi*_*ise 1 c sockets linux netcat

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

int t;
while ((t = read(clientsocket, buff, 128) > 0))
{
  write(1, buff, t);
}
Run Code Online (Sandbox Code Playgroud)

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

hmj*_*mjd 10

由于运算符优先级,这是不正确的:

while ((t = read(clientsocket, buff, 128) > 0))
Run Code Online (Sandbox Code Playgroud)

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

要更正,请更改为:

while ((t = read(clientsocket, buff, 128)) > 0)
Run Code Online (Sandbox Code Playgroud)