send和recv函数的问题
品茶识书香 2010-05-20 10:04:35 我在网上看到
这是发送、接收函数的原型
int send( SOCKET s, const char FAR *buf, int len, int flags );
int recv( SOCKET s, char FAR *buf, int len, int flags );
看到网上说
send仅仅是把buf中的数据copy到s的发送缓冲区的剩余空间里
recv函数仅仅是copy数据,真正的接收数据是协议来完成的
这两句话我明白,就是SOCKET对象底层维护着一个接收和发送的缓存。在发送和接收的时候,都是对这个缓存操作的。
现在我的问题是。如果服务器A 的 recv正在等待对方的数据堵塞在那里。对方客户A 的send已经把他要发送的数据copy到了他的缓冲区里,这时,突然对方关掉了SOCKET那么复制进客户A的发送缓存中的数据是否还会发送到我这边?我这边是接收到完整的数据。还是返回服务器A 的recv函数返回SOCKET_ERROR?
请高手指点