【发布时间】:2017-12-04 19:01:35
【问题描述】:
我相信 TCP 是可靠的。如果write(socket, buf, buf_len) 和close(socket) 返回没有错误,接收者将收到与buf 完全相同的数据,长度为buf_len。
但是this article 说 TCP 不可靠。
答:
sock = socket(AF_INET, SOCK_STREAM, 0); connect(sock, &remote, sizeof(remote)); write(sock, buffer, 1000000); // returns 1000000 close(sock);乙:
int sock = socket(AF_INET, SOCK_STREAM, 0); bind(sock, &local, sizeof(local)); listen(sock, 128); int client=accept(sock, &local, locallen); write(client, "220 Welcome\r\n", 13); int bytesRead=0, res; for(;;) { res = read(client, buffer, 4096); if(res < 0) { perror("read"); exit(1); } if(!res) break; bytesRead += res; } printf("%d\n", bytesRead);测验问题 - 程序 B 完成后会打印什么?
A) 1000000 B) something less than 1000000 C) it will exit reporting an error D) could be any of the above遗憾的是,正确答案是“D”。但这怎么会发生呢?程序 A 报告所有数据都已正确发送!
如果这篇文章是真的,我必须改变主意。但我不确定这篇文章是否属实。
这篇文章是真的吗?
【问题讨论】:
-
例如,在尝试读取数据时,数据可能尚未到达接收方,因此 read() 返回 0 并过早地跳出循环。