使用read函数读写套接字的有关问题
使用read函数读写套接字的问题
使用read函数从套接字的接受缓冲区中读取数据到应用缓冲区时需要指定一个表示需要读取多少字节的参数,阻塞情况下,如果接收缓冲区中的数据没有达到该参数指定的数量时,read函数会阻塞直到接收到指定字节数再返回还是立即返回?
------解决方案--------------------
如果这个套接字是阻塞的(默认情况下就是阻塞的),并且是Linux系统的,那么将阻塞,直到接收到了指定的字节数。
如果你把套接字设置为非阻塞的,那么将立刻返回。读取了多少字节,可以通过返回值得知。
为什么刚才会说Linux系统,因为不同的系统对于中断信号的处理是不一样的。比如说,你的程序进行read,但另外一个程序发了一个信号给这个程序,并且这个程序也设置了该信号的信号捕抓函数,那么当这个程序从信号捕抓函数返回后,回到read函数继续执行,还是退出read函数?这个是看具体的系统实现的。POSIX标准好像也没对这个有特别的要求。
如果楼主是用Linux系统(大部分情况下都是用这个系统),不用理会信号这种情况。
使用read函数从套接字的接受缓冲区中读取数据到应用缓冲区时需要指定一个表示需要读取多少字节的参数,阻塞情况下,如果接收缓冲区中的数据没有达到该参数指定的数量时,read函数会阻塞直到接收到指定字节数再返回还是立即返回?
------解决方案--------------------
如果这个套接字是阻塞的(默认情况下就是阻塞的),并且是Linux系统的,那么将阻塞,直到接收到了指定的字节数。
如果你把套接字设置为非阻塞的,那么将立刻返回。读取了多少字节,可以通过返回值得知。
为什么刚才会说Linux系统,因为不同的系统对于中断信号的处理是不一样的。比如说,你的程序进行read,但另外一个程序发了一个信号给这个程序,并且这个程序也设置了该信号的信号捕抓函数,那么当这个程序从信号捕抓函数返回后,回到read函数继续执行,还是退出read函数?这个是看具体的系统实现的。POSIX标准好像也没对这个有特别的要求。
如果楼主是用Linux系统(大部分情况下都是用这个系统),不用理会信号这种情况。