Chinaunix
标题:
明眼人帮我看一眼!这段代码有问题?
[打印本页]
作者:
joeywakeup
时间:
2005-07-14 16:55
标题:
明眼人帮我看一眼!这段代码有问题?
void mgw_rcv_Listener(void *par)
{
char p_buf[MSGHEADSIZE+DLVR_MSGBODY_SIZE_V30];
char* p_temp=NULL;
int offset=0;
int numbytes=0, recvbytes=0;
time_t cur_time;
int sockfd;
fd_set readfds;
int nfds;
while(1) {
numbytes=recv(sockfd, p_buf+recvbytes, MSGHEADSIZE+DLVR_MSGBODY_SIZE_V30-recvbytes,0);
if ( recvbytes>;= 12 )
{
last_time=time(NULL);
trytimes=TRY_TIME;
p_temp=p_buf;
while(recvbytes>;0) {
Start_Parser(p_temp);
offset=ntohl(*(unsigned long*)(p_temp));
recvbytes-=offset;
p_temp+=offset;//取掉这句也不会core dump!但是结果不对!
SLEEP_(10);
}
问题出在这段!如果不用循环直接用Start_Parser(p_temp);这句代替红色语句就不会有问题!但是结果也不对,丢失一部分数据!
}
SLEEP_(30);
}
}
这段代码有问题?在solaris下^bus error coredump
作者:
mq110
时间:
2005-07-14 16:59
标题:
明眼人帮我看一眼!这段代码有问题?
对sockfd什么都没做 就recv了??
作者:
joeywakeup
时间:
2005-07-14 17:11
标题:
明眼人帮我看一眼!这段代码有问题?
:)sock_fd的工作都做了,在其他方法里,没法都写上来!
看着有点一头雾水对吧?
这里略去很多代码!应该不会影响的。
thr_create(0,0,mgw_rcv_Listener,NULL,0,&g_ThreadId[1]);
这是相关语句,该方法是在线程里的!
我说的是不是不清楚?
作者:
~~天涯
时间:
2005-07-14 19:18
标题:
明眼人帮我看一眼!这段代码有问题?
offset=ntohl(*(unsigned long*)(p_temp));
取出来的长度么???
作者:
renstone921
时间:
2005-07-14 19:35
标题:
明眼人帮我看一眼!这段代码有问题?
老兄,看不懂你的程序,recvbytes是在那里修改的,我怎么找不到呢,如果recvbytes一直是0的话,if块怎么执行.还有能不能把要解析的数据的格式说一下.
在recv函数调用之后添加错误处理,先看一下错误信息.
我想首先你要确定到底是哪一部分程序出错.
判断是在数据接收部分出错还是在你的解析部分出错,
作者:
zhf3690
时间:
2005-07-15 00:00
标题:
明眼人帮我看一眼!这段代码有问题?
p_temp=p_buf;
while(recvbytes>;0) {
Start_Parser(p_temp);
offset=ntohl(*(unsigned long*)(p_temp));
unsigned long * aa;
memcpy( aa,p_temp,
; // 假设为8
offset = ntohl(aa);
试试这样看看,因为系统在分配内存的时候按字分配的。就是说如果你想分配一个字节,会分配4个字节。这里网络字节序转换只是对long或int型,假设为8位长度。
作者:
joeywakeup
时间:
2005-07-15 09:43
标题:
明眼人帮我看一眼!这段代码有问题?
每包前四个字节就是长度。打印出来 也是对的!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2