34 "This program won't work on this platform because there is no "
35 "support for sendfile().\n");
40#define FILE_LENGTH 200000
42#define FILE_DATA_CHAR '0'
44#define HDR1 "1234567890ABCD\n"
48#define TRL1 "IJKLMNOPQRSTUVWXYZ\n"
49#define TRL2 "!@#$%&*()\n"
53#define TESTSF_PORT 8021
55#define TESTFILE "testsf.dat"
75 aprerr(
"apr_socket_create()", rv);
83 aprerr(
"apr_socket_addr_get()", rv);
97 printf(
"Creating a test file...\n");
102 aprerr(
"apr_file_open()", rv);
112 aprerr(
"apr_file_putc()", rv);
118 aprerr(
"apr_file_puts()", rv);
125 aprerr(
"apr_file_close()", rv);
130 aprerr(
"apr_stat()", rv);
135 "test file %s should be %ld-bytes long\n"
136 "instead it is %ld-bytes long\n",
139 (
long int)finfo.
size);
153 aprerr(
"apr_procattr_create()", rv);
159 aprerr(
"apr_procattr_io_set()", rv);
164 aprerr(
"apr_procattr_cmdtype_set()", rv);
169 aprerr(
"apr_procattr_error_check_set()", rv);
177 aprerr(
"apr_proc_create()", rv);
194 struct iovec headers[3];
195 struct iovec trailers[3];
215 aprerr(
"apr_file_open()", rv);
224 aprerr(
"apr_sockaddr_info_get()", rv);
233 aprerr(
"apr_socket_close()",
tmprv);
243 aprerr(
"apr_socket_connect()", rv);
254 aprerr(
"apr_socket_opt_set(APR_SO_NONBLOCK)", rv);
261 aprerr(
"apr_socket_opt_set(APR_SO_NONBLOCK)", rv);
269 printf(
"Sending the file...\n");
271 hdtr.headers = headers;
274 hdtr.headers[0].iov_len = strlen(
hdtr.headers[0].iov_base);
276 hdtr.headers[1].iov_len = strlen(
hdtr.headers[1].iov_base);
282 hdtr.trailers = trailers;
283 hdtr.numtrailers = 3;
285 hdtr.trailers[0].iov_len = strlen(
hdtr.trailers[0].iov_base);
287 hdtr.trailers[1].iov_len = strlen(
hdtr.trailers[1].iov_base);
303 aprerr(
"apr_socket_sendfile()", rv);
306 printf(
"apr_socket_sendfile() updated offset with %ld\n",
309 printf(
"apr_socket_sendfile() updated len with %ld\n",
316 fprintf(
stderr,
"apr_socket_sendfile() didn't report the correct "
317 "number of bytes sent!\n");
346 printf(
"Calling apr_socket_sendfile()...\n");
348 for (
i = 0;
i <
hdtr.numheaders;
i++) {
349 printf(
"\t%ld bytes (%c)\n",
350 (
long)
hdtr.headers[
i].iov_len,
351 *(
char *)
hdtr.headers[
i].iov_base);
353 printf(
"File: %ld bytes from offset %ld\n",
356 for (
i = 0;
i <
hdtr.numtrailers;
i++) {
358 (
long)
hdtr.trailers[
i].iov_len);
362 printf(
"apr_socket_sendfile()->%d, sent %ld bytes\n", rv, (
long)
tmplen);
391 hdtr.headers[0].iov_base =
424 hdtr.trailers[0].iov_base =
435 "client problem: sent %ld of %ld bytes\n",
442 "client problem: rv %d\n",
451 aprerr(
"apr_file_seek()", rv);
454 printf(
"After apr_socket_sendfile(), the kernel file pointer is "
460 aprerr(
"apr_socket_shutdown()", rv);
468 aprerr(
"apr_socket_timeout_set()", rv);
474 aprerr(
"apr_socket_recv() (expected APR_EOF)", rv);
477 fprintf(
stderr,
"We expected to get 0 bytes read with APR_EOF\n"
478 "but instead we read %ld bytes.\n",
483 printf(
"client: apr_socket_sendfile() worked as expected!\n");
487 aprerr(
"apr_file_remove()", rv);
498 aprerr(
"apr_file_pipe_timeout_set()", rv);
503 aprerr(
"apr_file_read() messages from server", rv);
508 aprerr(
"apr_proc_wait() (expected APR_CHILD_DONE)", rv);
535 aprerr(
"apr_socket_opt_set()", rv);
540 aprerr(
"apr_sockaddr_info_get()", rv);
545 aprerr(
"apr_socket_bind()", rv);
550 aprerr(
"apr_socket_listen()", rv);
553 printf(
"Waiting for a client to connect...\n");
557 aprerr(
"apr_socket_accept()", rv);
560 printf(
"Processing a client...\n");
566 aprerr(
"apr_socket_recv()", rv);
583 aprerr(
"apr_socket_recv()", rv);
600 aprerr(
"apr_socket_recv()", rv);
603 fprintf(
stderr,
"apr_socket_recv()->%ld bytes instead of 1\n",
609 "problem with data read (byte %d of hdr 3):\n",
622 aprerr(
"apr_socket_recv()", rv);
625 fprintf(
stderr,
"apr_socket_recv()->%ld bytes instead of 1\n",
631 "problem with data read (byte %d of file):\n",
644 aprerr(
"apr_socket_recv()", rv);
661 aprerr(
"apr_socket_recv()", rv);
678 aprerr(
"apr_socket_recv()", rv);
681 fprintf(
stderr,
"apr_socket_recv()->%ld bytes instead of 1\n",
687 "problem with data read (byte %d of trl 3):\n",
699 aprerr(
"apr_socket_recv() (expected APR_EOF)", rv);
702 fprintf(
stderr,
"We expected to get 0 bytes read with APR_EOF\n"
703 "but instead we read %ld bytes (%c).\n",
708 printf(
"server: apr_socket_sendfile() worked as expected!\n");
724 aprerr(
"apr_initialize()", rv);
731 aprerr(
"apr_pool_create()", rv);
764 "Usage: %s client {blocking|nonblocking|timeout} [startserver] [server-host]\n"
const char apr_size_t len
APR Miscellaneous library routines.
APR Thread and Process Library.
const unsigned char * buf
#define APR_STATUS_IS_ECONNREFUSED(s)
#define APR_STATUS_IS_INCOMPLETE(s)
#define APR_STATUS_IS_EAGAIN(s)
apr_dbd_transaction_t int mode
apr_memcache_server_t * server
void apr_size_t apr_size_t * bytes_read
#define APR_FOPEN_TRUNCATE
#define APR_FOPEN_BUFFERED
#define apr_pool_create(newpool, parent)
int apr_exit_why_e * exitwhy
const char const char *const * args
#define apr_time_from_msec(msec)
apr_int64_t apr_interval_time_t
#define apr_time_from_sec(sec)
apr_status_t apr_socket_recv(apr_socket_t *sock, char *buf, apr_size_t *len)
apr_status_t apr_socket_accept(apr_socket_t **new, apr_socket_t *sock, apr_pool_t *connection_context)
apr_status_t apr_socket_listen(apr_socket_t *sock, apr_int32_t backlog)
apr_status_t apr_socket_bind(apr_socket_t *sock, apr_sockaddr_t *sa)
apr_status_t apr_socket_close(apr_socket_t *thesocket)
apr_status_t apr_socket_connect(apr_socket_t *sock, apr_sockaddr_t *sa)
apr_status_t apr_socket_shutdown(apr_socket_t *thesocket, apr_shutdown_how_e how)
apr_status_t apr_socket_create(apr_socket_t **new, int ofamily, int type, int protocol, apr_pool_t *cont)
apr_status_t apr_socket_opt_set(apr_socket_t *sock, apr_int32_t opt, apr_int32_t on)
apr_status_t apr_socket_timeout_set(apr_socket_t *sock, apr_interval_time_t t)