MCPcopy Create free account
hub / github.com/Qihoo360/evpp / ReadFromFD

Method ReadFromFD

evpp/buffer.cc:22–46  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20const size_t Buffer::kInitialSize = 1024;
21
22ssize_t Buffer::ReadFromFD(evpp_socket_t fd, int* savedErrno) {
23 // saved an ioctl()/FIONREAD call to tell how much to read
24 char extrabuf[65536];
25 struct iovec vec[2];
26 const size_t writable = WritableBytes();
27 vec[0].iov_base = begin() + write_index_;
28 vec[0].iov_len = writable;
29 vec[1].iov_base = extrabuf;
30 vec[1].iov_len = sizeof extrabuf;
31 // when there is enough space in this buffer, don't read into extrabuf.
32 // when extrabuf is used, we read 64k bytes at most.
33 const int iovcnt = (writable < sizeof extrabuf) ? 2 : 1;
34 const ssize_t n = ::readv(fd, vec, iovcnt);
35
36 if (n < 0) {
37 *savedErrno = errno;
38 } else if (static_cast<size_t>(n) <= writable) {
39 write_index_ += n;
40 } else {
41 write_index_ = capacity_;
42 Append(extrabuf, n - writable);
43 }
44
45 return n;
46}
47}

Callers 1

HandleReadMethod · 0.80

Calls 4

WritableBytesFunction · 0.85
beginFunction · 0.85
readvFunction · 0.85
AppendFunction · 0.85

Tested by

no test coverage detected