当前位置: 技术问答>linux和unix
求教网络编程read函数的问题
来源: 互联网 发布时间:2016-07-08
本文导语: 求教:在阅读W.Richard Stevens著的Unix网络编程卷一中tcp协议实现的回射程序遇到的困惑 在客户端输入: hellon 注意此时并没有输入ctrl+D 'n'表示回车符 回射程序还没有使用select函数修正,服务器端将直接调用read(fd,read_...
求教:在阅读W.Richard Stevens著的Unix网络编程卷一中tcp协议实现的回射程序遇到的困惑
在客户端输入:
hellon
注意此时并没有输入ctrl+D
'n'表示回车符
回射程序还没有使用select函数修正,服务器端将直接调用read(fd,read_buf,sizeof(read_buf));
默认情况下,网络套接口描述符应该是阻塞模式
如果read_buf长度为1024
read函数是否一直阻塞,直到读取1024个字符后才返回,还是读取到"hellon"后,马上返回?
应该是马上返回,不会等到读取到1024个字符,但是想不通为什么?
既然是阻塞模式而且没有读到文件结束符,read函数怎么可以返回呢?
难道对于阻塞模式的网络套接字read有特殊处理吗?
困惑很长时间了!!!
在客户端输入:
hellon
注意此时并没有输入ctrl+D
'n'表示回车符
回射程序还没有使用select函数修正,服务器端将直接调用read(fd,read_buf,sizeof(read_buf));
默认情况下,网络套接口描述符应该是阻塞模式
如果read_buf长度为1024
read函数是否一直阻塞,直到读取1024个字符后才返回,还是读取到"hellon"后,马上返回?
应该是马上返回,不会等到读取到1024个字符,但是想不通为什么?
既然是阻塞模式而且没有读到文件结束符,read函数怎么可以返回呢?
难道对于阻塞模式的网络套接字read有特殊处理吗?
困惑很长时间了!!!
|
服务端阻塞,是当文件句柄不可读时阻塞,不会根据你传的缓冲区大小阻塞。
你的客户端一次只发了一行数据,所以服务端就只能读到一行数据。
应该是你的客户端程序在读到回车时就做了一次write。
你的客户端一次只发了一行数据,所以服务端就只能读到一行数据。
应该是你的客户端程序在读到回车时就做了一次write。
|
阻塞只表示没有读到数据时不返回,不代表要读多少数据才返回