我想从套接字读取数据流,并在服务器完成发送后停止读取。下面的代码永远不会运行else if(因为read永远不会读取0个字节;))。如何在从服务器获得我想要的内容之后打破或修改while循环?
while(1){
/* receive answer from server */
t = read(sock, output, MAX);
if (t > 0) {
puts("received smthn");
}
else if (t == 0) {
puts("***ITS OVER***");
} else {
printf("Connection with server terminated.\n");
exit(1);
}
}
答案 0 :(得分:1)
要使read
函数返回0
,服务器必须关闭其侧面的套接字(请参阅close
)。
如果服务器忘记在套接字上调用close
,您可以在阅读之前尝试查看某些数据是否已准备好在套接字上读取:请参阅select
或查看https://stackoverflow.com/a/36786740/1212012