发新话题
打印

SOS:linux网络编程的怪问题

SOS:linux网络编程的怪问题

小弟近日在uCLinux中(运行在ARM7上)写了一个用UDP通讯的服务程序,可以传输数据,但是传了一段时间之后,网络突然ping不通,将eth0 down 了之后在 up,又恢复正常。(持续传输的时间长度不定,有时可传几十MB,有时只可传十几KB)
# V+ B) e$ Y. v' E6 P  _6 d( ~. O: o0 q# Z3 _; h5 Y7 O5 Y
ping不通时,抓包可看到uCLinux有ARP地址解释请求发出,并且对应的主机已经回答了这个请求,但是uCLinux还是一直在发ARP地址解释请求的报文,即uCLinux并没有正确得到对应主机的MAC地址。
1 G! j3 o+ w  `- _- {3 [8 O' ^+ B- E: B4 V# g2 a6 n6 m5 s  H+ X
若手动给uCLinux加上对应主机的MAC地址再ping,则主机能收到uCLinux的ICMP request报文,而且回复了ICMP reply报文,但是uCLinux显示的状态还是ping不通。
) S2 M8 F- y4 c) d# z. ^  \4 {4 I
小弟调了两天了,没有什么头绪,希望各位大虾指点一把,小弟拜谢了先!1 U4 m! t. y! [! R: z. [1 g0 b
! T7 Z- }& U; I2 i) ]( e
此外,若在服务程序中加入一些打印语句进行调试,对持续传输的时间长度也有影响,输出太频繁,持续的时间会越短。      

TOP

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

TOP

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

TOP

谢谢flag,是我没有把问题说清楚。ARP请求是在不能传输数据之后,我用ping命令引发的ARP地址解释请求,不是在传输过程中发的。
0 ]6 m0 d9 D- V9 r! v1 P还有flag斑竹提到的缓冲区是指应用层缓冲区,还是只内核网络驱动中的缓冲区的呢?具体问题是指缓冲区越界吗?      

TOP

不能传输数据之后……那还是可能因为MAC记录丢失了所以无法传输啊。9 D8 y9 N' g" _
也有可能是因为内存分配的问题,至于定位在什么地方就难说了。比如内存卸载等……
+ R; U8 ]3 @# q# c. ~9 ]6 V缓冲区越界这种应该会出很明显的内存错误。      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

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

TOP

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

TOP

偶把代码中的缓冲区操作尽量缩小,好像就好了,不过问题还是没有确切知道在那里。删掉的缓冲区操作代码逻辑上是没问题的,有可能是因为网络驱动的skb_buf和应用程序的缓冲区在内核中存在某种冲突(偶的嵌入式系统SDRAM只有8MB,应用程序最多可用4MB左右)。具体问题还在研究中,有进展我再贴出来大家共享。5 p- v* M5 e) T7 }( w, m! c
  `4 N  U" F6 P3 e8 l
不管怎么说,还是非常感谢flag版主!谢谢!      

TOP

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

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

TOP

发新话题