我正在使用POSIX套接字和文件描述符在C ++中实现面向对象的套接字接口。
我的问题是当我从istream
(我将其子类化为fdistream
)中读取字节时,在我断开套接字之前它不会返回数据。
还等什么?它是否在等待换行,即使我将其视为二进制流? 我需要在客户端发送字节后立即获取该字节。 (尝试使用Java)。
underflow()
实施:
fdinbuf::int_type fdinbuf::underflow () {
if (gptr() < egptr()) {
return traits_type::to_int_type(*gptr());
}
int numPutback;
numPutback = (int)(gptr() - eback());
if (numPutback > pbSize) {
numPutback = pbSize;
}
memmove(buffer+(pbSize-numPutback), gptr()-numPutback, numPutback);
int num;
num = (int)read (fd, buffer+pbSize, bufSize);
if (num <= 0) {
return EOF;
}
setg (buffer+(pbSize-numPutback),
buffer+pbSize,
buffer+pbSize+num);
return traits_type::to_int_type(*gptr());
}