fixed a bug in main-c.c

This commit is contained in:
hyung-hwan 2018-03-22 04:31:18 +00:00
parent 8be5e3fd83
commit b3c0640ba6
2 changed files with 27 additions and 35 deletions

View File

@ -128,16 +128,6 @@
# endif
#endif
union sockaddr_t
{
struct sockaddr_in in4;
#if (HCL_SIZEOF_STRUCT_SOCKADDR_IN6 > 0)
struct sockaddr_in6 in6;
#endif
};
typedef union sockaddr_t sockaddr_t;
struct bb_t
{
char buf[1024];
@ -251,7 +241,7 @@ struct hcl_server_worker_t
hcl_oow_t wid;
int sck;
sockaddr_t peeraddr;
hcl_sckaddr_t peeraddr;
int claimed;
@ -2002,7 +1992,7 @@ static HCL_INLINE void release_wid (hcl_server_t* server, hcl_server_worker_t* w
worker->wid = HCL_SERVER_WID_INVALID;
}
static hcl_server_worker_t* alloc_worker (hcl_server_t* server, int cli_sck, const sockaddr_t* peeraddr)
static hcl_server_worker_t* alloc_worker (hcl_server_t* server, int cli_sck, const hcl_sckaddr_t* peeraddr)
{
hcl_server_worker_t* worker;
@ -2250,7 +2240,7 @@ int hcl_server_start (hcl_server_t* server, const hcl_bch_t* addrs)
{
hcl_sckaddr_t srv_addr;
int srv_fd, sck_fam, optval, xret = 0;
socklen_t srv_len;
hcl_scklen_t srv_len;
pthread_attr_t thr_attr;
/* TODO: interprete 'addrs' as a command-separated address list
@ -2293,9 +2283,9 @@ int hcl_server_start (hcl_server_t* server, const hcl_bch_t* addrs)
server->stopreq = 0;
while (!server->stopreq)
{
sockaddr_t cli_addr;
hcl_sckaddr_t cli_addr;
int cli_fd;
socklen_t cli_len;
hcl_scklen_t cli_len;
pthread_t thr;
hcl_ntime_t tmout;
hcl_server_worker_t* worker;

View File

@ -442,13 +442,18 @@ static int handle_logopt (hcl_client_t* client, const hcl_bch_t* str)
static int start_reply (hcl_client_t* client, hcl_client_reply_type_t type, const hcl_ooch_t* dptr, hcl_oow_t dlen)
{
client_xtn_t* client_xtn;
client_xtn = hcl_client_getxtn(client);
if (dptr)
{
printf ("GOT SHORT-FORM RESPONSE[%d] with data <<%.*ls>>\n", (int)type, (int)dlen, dptr);
/* short-form response - no end_reply will be called */
client_xtn->reply_count++;
fflush (stdout);
}
else
{
printf ("GOT LONG_FORM RESPONSE[%d]\n", (int)type);
/* long-form response */
}
return 0;
}
@ -460,26 +465,24 @@ static int end_reply (hcl_client_t* client, hcl_client_end_reply_state_t state)
if (state == HCL_CLIENT_END_REPLY_STATE_REVOKED)
{
printf (">>>>>>>>>>>>>>>>>>>>>> REPLY revoked....\n");
/* nothing to do here */
}
else
{
client_xtn->reply_count++;
printf (">>>>>>>>>>>>>>>>>>>>> REPLY ENDED OK....\n");
fflush (stdout);
}
return 0;
}
static int feed_attr (hcl_client_t* client, const hcl_oocs_t* key, const hcl_oocs_t* val)
{
printf ("GOT HEADER ====> [%.*ls] ===> [%.*ls]\n", (int)key->len, key->ptr, (int)val->len, val->ptr);
return 0;
}
static int feed_data (hcl_client_t* client, const void* ptr, hcl_oow_t len)
{
//printf ("GOT DATA>>>>>>>>>[%.*s]>>>>>>>\n", (int)len, ptr);
printf ("%.*s", (int)len, ptr);
printf ("%.*s", (int)len, ptr);
return 0;
}
@ -490,11 +493,11 @@ static int handle_request (hcl_client_t* client, const char* ipaddr, const char*
hcl_sckaddr_t sckaddr;
hcl_scklen_t scklen;
int sckfam;
int sck;
struct iovec iov[10];
int sck = -1;
struct iovec iov[3];
int index, count;
hcl_oow_t xlen, offset;
hcl_oow_t used, avail;
int x;
hcl_bch_t buf[256];
ssize_t n;
@ -507,22 +510,20 @@ static int handle_request (hcl_client_t* client, const char* ipaddr, const char*
if (sckfam <= -1)
{
fprintf (stderr, "cannot convert ip address - %s\n", ipaddr);
return -1;
goto oops;
}
sck = socket (sckfam, SOCK_STREAM, 0);
if (sck <= -1)
{
fprintf (stderr, "cannot create a socket for %s\n", ipaddr);
return -1;
goto oops;
}
if (connect(sck, (struct sockaddr*)&sckaddr, scklen) <= -1)
{
fprintf (stderr, "cannot connect to %s\n", ipaddr);
close (sck);
return -1;
goto oops;
}
count = 0;
@ -565,10 +566,10 @@ static int handle_request (hcl_client_t* client, const char* ipaddr, const char*
client_xtn->reply_count = 0;
/* TODO: implement timeout? */
offset = 0;
avail = 0;
while (client_xtn->reply_count == 0)
{
n = read(sck, &buf[offset], HCL_SIZEOF(buf) - offset); /* switch to recv */
n = read(sck, &buf[avail], HCL_SIZEOF(buf) - avail); /* switch to recv */
if (n <= -1)
{
fprintf (stderr, "Unable to read from %d - %s\n", sck, strerror(n));
@ -584,11 +585,12 @@ static int handle_request (hcl_client_t* client, const char* ipaddr, const char*
break;
}
x = hcl_client_feed(client, buf, n, &xlen);
avail += n;;
x = hcl_client_feed(client, buf, avail, &used);
if (x <= -1) goto oops;
offset = n - xlen;
if (offset > 0) memmove (&buf[0], &buf[xlen], offset);
avail -= used;
if (avail > 0) memmove (&buf[0], &buf[used], avail);
}
/* TODO: we can check if the buffer has all been consumed. if not, there is trailing garbage.. */