我的问题是:
如果一个请求太大,那么会分成几个部分。因此我需要一种方法来判断什么时候该请求结束。
1.对于阻塞模式的socket,在接收到IE的最后一个包之后还recv,将会阻塞。同样我要从IIS上接收的时候如果是最后一个包也会遇到同样的情况。
我试过使用ioctlsocket查询可用的字节,如果为0就认为是结束。但不好用。而且它返回的值不一定准确
2.对于非阻塞的socket,如果连续发送两个包的时间间隔太短,那么就可能产生WSAEWOULDBLOCK错误。虽然可以使用Sleep,但不是一个很好的方法,影响效率。
用事件来控制嘛。。
你没写过,大的程序或,多线程吧。
你自己先判断头啊,在头里得到数据包的长度,然后由你来拆分啊.
请问“对于阻塞模式的socket,在接收到IE的最后一个包之后还recv,将会阻塞”是什么意思呢?
是不是,如果数据已经接收完了,还继续recv()的话,线程就会阻塞是吗?
也就是我继续进行send()等其他函数都不工作,不知道这样理解对不对?请指教,谢谢!
对于非阻塞方式,使用多线程,当发送完最后一个包后,在客户端将此SOCKET关闭,这样在客户端会收到一个错误,判断该错误的错误类型进行处理后,退出线程。
你可以用一个单独的线程采用非阻塞的方式处理,如果是产生WSAEWOULDBLOCK的错误,就返回等待一个新的消息通知,不用sleep了吧。
可以采用一个单独的线程来用非阻塞的方式接受,如果是WSAEWOULDBLOCK错误,就返回,接受完成后,关闭该线程