一个Windows Sockets编程的问题

zhuang094 2001-10-18 10:51:18
请问FD_WRITE事件是表示什么意思?
FD_READ是通知有数据到达,那么FD_WRITE是通知有数据发送,还是通知可以发送数据了?我看有些书上是说:FD_READ事件在有数据到达时发生;FD_WRITE事件在有数据发送时产生。
请众位大虾帮我理清这个认识。
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuang094 2001-10-18
  • 打赏
  • 举报
回复
to: mn_th(mn) 
顺便再问一个问题:客户端在不通过发送检测数据包的情况下,如何检测到服务器端非正常退出(如死机,断了网线等)。
期待您的答复。
zhuang094 2001-10-18
  • 打赏
  • 举报
回复
to: mn_th(mn) 
您的解答很详细,非常感谢!这就给您加分。
mn_th 2001-10-18
  • 打赏
  • 举报
回复
系统会通知我们 FD_WRITE 事件的讯息,只有下列几种情况:
(1)呼叫 WSAAsyncSelect() 来设定 FD_WRITE 事件时,Socket 已经可以
传送资料(TCP scoket 已经和对方连接成功了,或 UDP socket 已建立完成),
且目前 output buffer 仍有空间可写入资料。
(2)呼叫 WSAAsyncSelect() 来设定 FD_WRITE 事件时,Socket 尚不能传
送资料,不过一旦 Socket 与对方连接成功,马上就会收到 FD_WRITE 的通
知。
(3)呼叫 send() 或 sendto() 传送资料时,系统告知错误,且错误码为
10035 WSAEWOULDBLOCK (呼叫 WSAGetLastError() 得知这项错误),这
时表示 output buffer 已经满了,无法再写入任何资料(此时即令呼叫再多次的
send() 也都一定失败);一旦系统将部份资料成功送抵对方,空出 output buffer
後,便会送一个 FD_WRITE 给使用者,告知可继续传送资料了。换句话说,读
者在呼叫 send() 传送资料时,只要不是返回错误 10035 的话,便可一直继续呼
叫 send() 来传送资料;一旦 send() 回返错误 10035,那麽便不要再呼叫 send()
传送资料,而须等收到 FD_WRITE 後,再继续传送资料。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧