调用WSAAsyncSelect后,什么时候触发FD_WRITE消息啊

在服务器端程序开发中,通过WSAAsyncSelect设置套接字为异步非阻塞模式。FD_READ事件在客户端发送数据后自动触发,用于接收数据。而FD_WRITE事件的触发存在疑惑,讨论中提到FD_WRITE会在socket准备好发送时触发,可能在连接建立或发送失败返回WSAEWOULDBLOCK后。直接使用send可能会失败,需要根据FD_WRITE事件来确定发送时机。对于想要主动发送数据的情况,可以在接收数据后立即尝试send,或者在按钮点击或特定周期时触发发送操作。FD_WRITE的触发并不局限于一次,而是在系统缓冲允许发送时多次触发。
摘要由CSDN通过智能技术生成
 

开发服务器端程序时,调用WSAAsyncSelect将套接字设置为异步非阻塞,服务器端和客户端的通讯是客户端先向服务器端发送一组数据,服务器给客户端回复一组数据,就这样反复执行。

//消息响应函数
...
case       FD_READ:           //网络数据包到达事件      
    {      
    OnReceive(CurSock);      
    break;      
    }      
  case       FD_WRITE:           //发送网络数据事件      
    {      
    OnSend(CurSock);      
    break;      
    }
...

我的设想是调用OnReceive接收数据后后马上传递给OnSend函数进行处理,处理完后OnSend函数将处理后的数据发送给客户端。可是我怎么控制OnReceive和OnSend的执行顺序啊?
FD_READ事件是当对方发送数据过来后就应该自动触发的,FD_WRITE是怎么触发的?按我的情况,最好响应FD_READ事件后响应FD_WRITE事件。请高手给指点迷津。

还有个小问题,使用WSAAsyncSelect将socket设置为异步非阻塞模式后,还能用send吗?还是必须用WSASend? 100 

第1个回答
FD_WRITE事件是socket已经准备好了,你可以调用send了,这个时候触发的,如果未收到这个消息就调用send会失败。

你可以定义两个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值