$ ./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 *= 2
size_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.