如果是同时给一个socket同时WSASend的情况   应该怎么处理呢谢谢

解决方案 »

  1.   

    http://blog.csdn.net/wang921718/archive/2007/09/04/1772396.aspx看看这里我的BLOG,希望对你能有帮助!
      

  2.   

    拜托楼上,先看清问题再打广告。
    在完成端口当中对一个Socket同时发多个WSASend,如果是正常情况下,那么这些WSASend所提交的数据依序被发送出去。但是有例外情况,可能全使得其中某个或多个WSASend所发送的数据还没有发送完成就产生一个完成事件(这种情况很少出现,一般地说,只要你编码没有问题,基本上不会出现).另外就算是完成端口,它所使用的也是基础网络,而基础网络都有带宽等瓶颈,如此就有可能产生大量地未决请求,而即便是你的Socket采用了用户缓存,仍然不可避免地在系统未分页内存当中占用一定的资源,非必要的时候(比如你做的是一个高并发的服务器,所谓服务器就是为大众服务,而不是个人,所以没有必要为谁去争取如此时间)不建议对同一个Socket发起多余地WSASend,可以对其建立发送队列,一个个发送,如此就算是前面所提到的异常情况发生了,也不至于影响到数据包的顺序。另外由于系统未分页内存是有限的(Win32系统当中,最高约不到256MB),如此如果一个Socket本来发送就缓慢,还为它堆积一堆不必要的发送请求,占用大量的系统资源,显示不合理。就算是必要的情况下,也需要控制未决的发送请求量。比如你在对某个Socket提交WSASend的时候,可以增加一个计数,而等这个发送返回之后,再扣减一个计数,如此等等。
      

  3.   

    谢谢 unsigned 我还想问一下  加入在完成端口中  一个socket正在recv  而我又必须在服务器主动send一些数据给客户端那么 会影响recv么  
    如果同一个socket有多个recv  会引起什么问题?
      

  4.   

    处理好每一个socket,处理好每一次连接,相互关系理顺。