- 论坛徽章:
- 0
|
就是啊 在数据部分加了一个标志flag 在接收方在读取数据的时候不会最为真正的数据向应用层传送
就是不明白为什么为奔溃... 麻烦Godbach 帮我看看 谢谢啦
下面是我在tcp_sendmsg()
修改的部分
{
........
off = 0;
if (copy > PAGE_SIZE - off)
copy = PAGE_SIZE - off;
if (!sk_wmem_schedule(sk, copy))
goto wait_for_memory;
if (!page) {
/* Allocate new cache page. */
if (!(page = sk_stream_alloc_page(sk)))
goto wait_for_memory;
}
if(copy>=mss_now-1)
{//mss_now-1
copy=mss_now-1;
//else
//copy=copy-1;
duBufferTemp=duBuffer;
duBuffer=duBuffer+copy;
*duBuffer=0x23;
duBuffer=duBufferTemp;
if((copy_from_user(duBuffer, from, copy)))
{
printk(KERN_INFO "tcp_sendmsg copy_from_user(duBuffer, from, copy) Unsuccess!\n" ;
goto wait_for_memory;
}
else
{
printk(KERN_INFO "tcp_sendmsg copy_from_user(duBuffer, from, copy) success!\n" ;
}
copyOrginal=copy;//to restore the orign data
copy=copy+1;
}
else
{
duBufferTemp=duBuffer;
duBuffer=duBuffer+copy;
*duBuffer=0x23;//flag
duBuffer=duBufferTemp;
if((copy_from_user(duBuffer, from, copy)))
{
printk(KERN_INFO "tcp_sendmsg copy_from_user(duBuffer, from, copy) Unsuccess!\n" ;
goto wait_for_memory;
}
else
{
printk(KERN_INFO "tcp_sendmsg copy_from_user(duBuffer, from, copy) success!\n" ;
}
copyOrginal=copy;
copy=copy+1;
}
duBuffer=duBufferTemp;
fromTMP=from;
from=duBuffer;
/* Time to copy data. We are close to
* the end! */
err = skb_copy_to_page_nocache(sk, from, skb,
page, off, copy);
if (err) {
/* If this page was new, give it to the
* socket so it does not get leaked.
*/
if (!TCP_PAGE(sk)) {
TCP_PAGE(sk) = page;
TCP_OFF(sk) = 0;
}
goto do_error;
}
回复 11# Godbach
|
|