其实我是要调用send函数,但是在一个地方看到了下面的一段话,
当调用该函数时,send先比较待发送数据的长度len和套接字s的发送缓冲区的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR;如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么send就比较s的发送缓冲区的剩余空间和len,如果len大于剩余空间大小send就一直等待协议把s的发送缓冲中的数据发送完,如果len小于剩余空间大小send就仅仅把buf中的数据copy到剩余空间里。如果send函数copy数据成功,就返回实际copy的字节数,如果send在copy数据时出现错误,那么send就返回SOCKET_ERROR;如果send在等待协议传送数据时网络断开的话,那么send函数也返回SOCKET_ERROR。要注意send函数把buf中的数据成功copy到s的发送缓冲的剩余空间里后它就返回了,但是此时这些数据并不一定马上被传到连接的另一端。如果协议在后续的传送过程中出现网络错误的话,那么下一个Socket函数就会返回SOCKET_ERROR。
所以我想应该先取得socket缓冲区的长度吧,但是应该怎样取得?用getsockopt函数?可是这个东西怎么用呢?MSDN里说的好像不太详细。请指教,谢谢。
int reuse;
getsockopt(sd,SOL_SOCKET,SO_SNDBUF,(const char *)&reuse,sizeof(reuse));
给分
用getsockopt()获得发送和接收缓冲区长度。
可以参考一下<windows网络编程技术>第9章,里面讲的很清楚。