【发布时间】:2015-07-09 16:50:56
【问题描述】:
我用 C 语言编写了一个客户端和一个服务器来测试与套接字的数据传输。
基本上,服务器等待连接,接受它并向客户端文件描述符调用read() 函数,如下所示:
while (read(clisock_fd, client_message, 20000) > 0) {
puts(client_message);
}
在客户端程序中,我只发送一条带有write()的消息,如下所示:
write(sockfd, my_message, strlen(my_message));
我想不通的是,如果 write() 函数发送 8 个字节,而 read() 函数读取它们一次,它怎么知道是时候停止等待任何其他消息了?
例如,如果我发送 3000 个字节,read 函数读取 1448 个字节,然后它会读取其余的字节,然后它就知道它已经结束并停止。怎么样?
【问题讨论】:
-
没有更多数据可以从通信堆栈缓冲区中读取,因此 read() 调用阻塞,直到 nic 中断,随后驱动程序运行,提供更多数据,(或连接关闭由对等方,或发生错误)。