peakzhang 发表于 2008-5-21 23:19:25

send,ACE_Reactor以及handle_output的问题,n久都没搞明白

其实我原来用过ACE_Reactor,感觉和select的用法没有太多本质区别,我只用一些基本功能。平台是windows。
但是,这几天重新使用ACE_Reactor,出了很多诡异的事情,搞了好久都不明白,发到版上问一问,看看哪位碰到过类似情况。
我其实就是使用send和WRITE_MASK,用非阻塞socket,将好几段大段数据块连续发送出去。本来感觉非常简单。
但是,我发现无论我一次send的内容(用的是ACE_SOCK_Stream的send)有多大(比如50MBytes),都能一次发送成功,send返回发送成功50MBytes,这个其实很奇怪,我发现好像windows又起了线程,不断发送。即使我迫使这个发送程序发送操作完毕以后,马上退出,windows仍然在不停的发送,而且另外的接收端也能正常接受,直到50M全部发送完。这个感觉很诡异,按照我原来的经验,应该只能发送一点点才对,然后监听可写消息(WRITE_MASK),不断send才对。
再说另外一面,由于我的程序发现我一次发送50M成功,所以会自动又发送接下来的50M,这回send会返回-1,errno是EWOULDBLOCK,这个感觉是对的,然后我马上register write_mask。但是程序马上进入handle_output,这个就不对了,因为我前一个50M还没有发送完毕,看看网卡的发送流量就知道了,但是却立刻进入handle_output。接下来,会执行handle_output里面的send,结果返回-1,errno是100014,也就是WSAEFAULT,非常奇怪
本来这么简单的事情,怎么感觉哪儿都不对呢?
谁遇到过这种情况?

peakzhang 发表于 2008-5-21 23:19:32

intersting, can you try send_n instead.

peakzhang 发表于 2008-5-21 23:19:41

我遇到的情况是,在我禁用了对端的网卡之后(禁用5分钟后自动启用网卡)较长一段时间内,本地的handle_output里调用的send_n还会返回成功,但不总是成功,不明白怎么回事,很郁闷。知道的来说说吧。学习了◎!!!~~
页: [1]
查看完整版本: send,ACE_Reactor以及handle_output的问题,n久都没搞明白