use big-endian for client package

This commit is contained in:
云风
2012-08-08 13:55:51 +08:00
parent 7aee6b66d1
commit 889cf50709
3 changed files with 10 additions and 7 deletions

View File

@@ -38,7 +38,7 @@ _read(void *ud) {
uint8_t header[2];
fflush(stdout);
readall(fd, header, 2);
size_t len = header[0] | header[1] << 8;
size_t len = header[0] << 8 | header[1];
if (len>0) {
char tmp[len+1];
readall(fd, tmp, len);
@@ -56,8 +56,8 @@ test(int fd) {
fgets(tmp,sizeof(tmp),stdin);
int n = strlen(tmp) -1;
uint8_t head[2];
head[0] = n & 0xff;
head[1] = (n >> 8) & 0xff;
head[0] = (n >> 8) & 0xff;
head[1] = n & 0xff;
int r;
r = send(fd, head, 2, 0);
if (r<0) {

View File

@@ -183,7 +183,7 @@ _cb(struct skynet_context * ctx, void * ud, int session, const char * uid, const
getpeername(fd, (struct sockaddr *)&remote_addr, &len);
_report(ctx, "%d open %d %s:%u",id,fd,inet_ntoa(remote_addr.sin_addr),ntohs(remote_addr.sin_port));
}
uint16_t * plen = mread_pull(m,2);
uint8_t * plen = mread_pull(m,2);
if (plen == NULL) {
if (mread_closed(m)) {
_remove_id(g,id);
@@ -191,7 +191,9 @@ _cb(struct skynet_context * ctx, void * ud, int session, const char * uid, const
}
goto _break;
}
void * data = mread_pull(m, *plen);
// big-endian
uint16_t len = plen[0] << 8 | plen[1];
void * data = mread_pull(m, len);
if (data == NULL) {
if (mread_closed(m)) {
_remove_id(g,id);
@@ -200,7 +202,7 @@ _cb(struct skynet_context * ctx, void * ud, int session, const char * uid, const
goto _break;
}
_forward(ctx, g, id, data, *plen);
_forward(ctx, g, id, data, len);
mread_yield(m);
_break:
skynet_command(ctx, "TIMEOUT", "0");

View File

@@ -15,7 +15,8 @@ _cb(struct skynet_context * context, void * ud, int session, const char * addr,
int fd = (int)(intptr_t)ud;
struct iovec buffer[2];
uint8_t head[2] = { sz & 0xff , sz >> 8 & 0xff };
// send big-endian header
uint8_t head[2] = { sz >> 8 & 0xff , sz & 0xff };
buffer[0].iov_base = head;
buffer[0].iov_len = 2;
buffer[1].iov_base = (void *)msg;