发新话题
打印

SOS:linux网络编程的怪问题

SOS:linux网络编程的怪问题

小弟近日在uCLinux中(运行在ARM7上)写了一个用UDP通讯的服务程序,可以传输数据,但是传了一段时间之后,网络突然ping不通,将eth0 down 了之后在 up,又恢复正常。(持续传输的时间长度不定,有时可传几十MB,有时只可传十几KB)( [8 Q' V3 e) _# S5 g4 a
8 b& a* g( f; D$ M" I3 w
ping不通时,抓包可看到uCLinux有ARP地址解释请求发出,并且对应的主机已经回答了这个请求,但是uCLinux还是一直在发ARP地址解释请求的报文,即uCLinux并没有正确得到对应主机的MAC地址。
, h# ^* ~( f$ d! s3 S3 r$ h3 _' Q9 W
若手动给uCLinux加上对应主机的MAC地址再ping,则主机能收到uCLinux的ICMP request报文,而且回复了ICMP reply报文,但是uCLinux显示的状态还是ping不通。$ I9 Z5 h( j% K3 v% Y' R

8 P0 J7 V7 E8 w7 }小弟调了两天了,没有什么头绪,希望各位大虾指点一把,小弟拜谢了先!
2 F  @* }9 J! x9 G# Y
$ Y8 }; c# Y9 W( W6 H; i此外,若在服务程序中加入一些打印语句进行调试,对持续传输的时间长度也有影响,输出太频繁,持续的时间会越短。      

TOP

怀疑是缓冲区的问题?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

不过为什么会传输中还发ARP请求?MAC地址记录丢失了?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

谢谢flag,是我没有把问题说清楚。ARP请求是在不能传输数据之后,我用ping命令引发的ARP地址解释请求,不是在传输过程中发的。0 V& v1 ]! g; N7 E$ i8 I. S& e  d
还有flag斑竹提到的缓冲区是指应用层缓冲区,还是只内核网络驱动中的缓冲区的呢?具体问题是指缓冲区越界吗?      

TOP

不能传输数据之后……那还是可能因为MAC记录丢失了所以无法传输啊。
1 {1 ~( A0 f9 |( S3 }也有可能是因为内存分配的问题,至于定位在什么地方就难说了。比如内存卸载等……
( e4 T" a! y8 D# I! Q' _5 |" u  ^缓冲区越界这种应该会出很明显的内存错误。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

我又试了很多遍,各种迹象都表明flag所说的原因(缓冲区管理)最有可能,但是还未定位错误,只是有了一个往下做的思路,谢谢斑竹。有了进展我在回复!;-)      

TOP

难道有人给它发了重定向?      
曾经有一个古老的传说。 传说中的主人公叫传说。 而我就是传说中的传说。

TOP

偶把代码中的缓冲区操作尽量缩小,好像就好了,不过问题还是没有确切知道在那里。删掉的缓冲区操作代码逻辑上是没问题的,有可能是因为网络驱动的skb_buf和应用程序的缓冲区在内核中存在某种冲突(偶的嵌入式系统SDRAM只有8MB,应用程序最多可用4MB左右)。具体问题还在研究中,有进展我再贴出来大家共享。, B- B. g9 m' \* g
/ V7 p2 G5 A8 H" Z8 _' i2 E
不管怎么说,还是非常感谢flag版主!谢谢!      

TOP

【求助】您好,我也碰到同样问题,您能提示一下您是如何解决的吗?

非常感谢! 解决方法请回复  lishengg@163.com      

TOP

发新话题