acl/lib_acl/samples/vstream_client/main.c

107 lines
2.2 KiB
C

#include "lib_acl.h"
static void usage(const char *proc)
{
printf("usage: %s -h [help]\r\n"
" -s server_addr[default: 127.0.0.1:8888]\r\n"
" -n loop_count[default: 10]\r\n"
" -i inter count to print\r\n"
" -l data size[default: 4096]\r\n"
" -m [if timeout's unit using ms]\r\n"
" -r [if read echo data from server]\r\n"
, proc);
}
int main(int argc, char *argv[])
{
ACL_VSTREAM *client;
char addr[64], *buf, *buf2, line[128];
int n, i, len = 4096, count = 10, inter = 1000;
int set_ms = 0, read_result = 0;
snprintf(addr, sizeof(addr), "127.0.0.1:8888");
while ((n = getopt(argc, argv, "hs:l:n:i:rm")) > 0) {
switch (n) {
case 'h':
usage(argv[0]);
return 0;
case 's':
snprintf(addr, sizeof(addr), "%s", optarg);
break;
case 'l':
len = atoi(optarg);
break;
case 'n':
count = atoi(optarg);
break;
case 'i':
inter = atoi(optarg);
break;
case 'r':
read_result = 1;
break;
case 'm':
set_ms = 1;
break;
default:
break;
}
}
if (len <= 0) {
printf("invalid len: %d <= 0\r\n", len);
return 1;
}
acl_msg_stdout_enable(1);
/* 连接服务器 */
if (set_ms) {
client = acl_vstream_timed_connect(addr, ACL_BLOCKING, 100, 100, 4096, NULL);
} else {
client = acl_vstream_connect(addr, ACL_BLOCKING, 10, 10, 4096);
}
if (client == NULL) {
printf("connect %s error %s\r\n", addr, acl_last_serror());
return 1;
}
printf("connect %s ok ...\r\n", addr);
buf = (char*) acl_mymalloc(len);
snprintf(buf, len, "%d\r\n", len);
buf2 = (char*) acl_mymalloc(len);
memset(buf, 'X', len);
for (i = 0; i < count; i++) {
n = acl_vstream_writen(client, buf, len);
if (n == ACL_VSTREAM_EOF) {
printf("write error %s\r\n", acl_last_serror());
break;
}
if (i % inter == 0) {
snprintf(line, sizeof(line), "curr: %d, total: %d", i, count);
ACL_METER_TIME(line);
}
if (read_result == 0) {
continue;
}
if (acl_vstream_readn(client, buf2, len) != len) {
printf("read echo from server error\r\n");
break;
}
}
acl_myfree(buf);
acl_myfree(buf2);
acl_vstream_close(client);
return 0;
}