TCP通信的时候,发送大量数据会死机

在MFC中使用异步套接字进行TCP通信时,程序因不断生成并发送大量数据而死机。怀疑是由于网络缓冲区来不及处理新数据,导致内存耗尽。为解决此问题,考虑在发送数据前检查网络发送缓冲区的空闲容量,当缓冲区满时挂起发送线程,空闲容量足够时恢复。询问如何获取网络发送缓冲区的状态和容量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在MFC里面,用socket写了一个TCP通信的程序,异步套接字编程,注册了FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE事件。在客户端的主线程里面又创建了两个线程,一个线程不断的生成数据,另外一个线程把生成的数据发送出去,只要有数据生成就通过套接字发送。程序运行一段时间就会死机。
发送线程调用send函数发送数据,send(pFrame->m_socket, pBuf,length, 0);
我感觉数据生成的太多,在网络缓冲里面的数据还没有来得及发送的时候,又通过send函数往网络缓冲区中写数据了,最后内存耗尽,导致死机。
请问用什么方法可以解决这个问题呢?
在数据发送的时候如果知道网络发送缓冲区还有多大的空闲容量就可以确定是否要调用send函数了吧?如果网络发送缓冲区满了,就挂起发送数据的线程,如果网络发送缓冲区的空闲容量大于某个值了,就恢复发送数据的线程,这样可以吗?
怎么才能知道网络发送缓冲区是否已经满了?
如何知道网络发送缓冲区的空闲容量呢?

你不会是因为其它分配的内存资源没有及时释放导致的吧。。。
1、怎么才能知道网络发送缓冲区是否已经满了?
2、如何知道网络发送缓冲区的空闲容量呢?

如果我知道了前面的两个东西,再改一下程序就知道是不是你说的这个问题了
1。缓冲区慢了会send失败,再次空闲会调用FD_WRITE事件,可以根据这个进行推断是哪出了问题。
2。无法得知,这个是TCP算法决定的,你知道底层缓冲区多大?怎么个发送方法?它会拆成多少个小数据包?怎么个发送方法?恐怕看tcp/ip协议才知道。

错误排查需要你去单步调试 监控数据异常推断的。
没有一眼就能看出来的隐含错误;
我在程序里面可以这样吗?定义一个变量,BOOL m_bSend;当FD_WRITE消息到达的时候,m_bSend为TRUE;当在发送线程中send失败的时候,m_bSend为FALSE。在发送线程中判断m_bS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值