$ ./word-counter -d13 >/dev/null Open client socket 6. read(6) returned 2180. host = www.monmouth.edu, port = 80 Open server connection 8. write(8) returned 2180. read(8) returned 1460. read(8) returned 1460. read(8) returned 5840. read(8) returned 5851. write(6) returned 14611. read(8) returned 0. Close socket 8. Close socket 6.
const unsigned bsize = 10000; char buffer[bsize]; int e = read(skt, buffer, bsize);
data
points to the buffer.
size
gives the amount of data in the buffer.
append()
.
void http_message:: append(ccp dt, unsigned sz) if (size + sz >= size_max) size_max *= 2 char * ndata = new char [size_max] memcpy(ndata, data, size) delete [] data data = ndata memcpy(data + size, dt, sz) size += sz
append()
doubles size to increase buffer space.
word-counter
coredumps sometimes.
$ ./word-counter -d13 > /dev/null Open client socket 6. read(6) returned 2180. Segmentation Fault(coredump) $ gdb word-counter core GNU gdb 5.2 (gdb) up 165 char * buffer = new char[sz + 1]; (gdb) list 161, 166 161 bool match(ccp start, ccp end) { 162 163 assert(start <= end); 164 const unsigned sz = end - start; 165 char * buffer = new char[sz + 1]; 166 memcpy(buffer, start, sz); (gdb) print sz $1 = 2180 (gdb)
www.monmouth.edu
coredumped on rockhopper, but not on cslab.
cslab (from lynx) |
---|
$ ./word-counter -d13 >/dev/null Open client socket 6. read(6) returned 2180. host = www.monmouth.edu, port = 80 Open server connection 8. write(8) returned 2180. read(8) returned 1460. read(8) returned 1460. read(8) returned 5840. read(8) returned 5851. write(6) returned 14611. read(8) returned 0. Close socket 8. Close socket 6. |
rockhopper (from firebird) |
$ ./word-counter -d13 > /dev/null Open client socket 4. read(4) returned 474. host = www.monmouth.edu, port = 80 Open server connection 5. write(5) returned 474. read(5) returned 2896. read(5) returned 10000. Memory fault (core dumped) |
size_max
properly.
void http_message:: append(ccp dt, unsigned sz) if (size + sz >= size_max)size_max *= 2size_max = 2*(size + sz) char * ndata = new char [size_max] memcpy(ndata, data, size) delete [] data data = ndata assert(size + sz <= size_max) memcpy(data + size, dt, sz) size += sz
assert(size + sz <= size_max) memcpy(data + size, dt, sz) $ ./word-counter > /dev/null word-counter: http-message.cc:26: http_message::append(char*, unsigned): Assertion size + sz <= size_max failed. Abort (core dumped)
This page last modified on 28 October 2003.