网络结构:阻塞式的,有连接的TCP 我调用send()函数发送一个12M大小文件的时候每次函数都立刻返回,并不阻塞在那里,且返回值就是12M缓冲区的大小,为什么呢?我用的是默认的send()函数,就是阻塞式的。是不是什么地方还要设置?
另外,就算我在发送之前把网线拔了,send()依旧出现上面的情况,难道send()函数返回的不是真实发送的字节数??
另外,就算我在发送之前把网线拔了,send()依旧出现上面的情况,难道send()函数返回的不是真实发送的字节数??
The send function is used to write outgoing data on a connected socket. For message-oriented sockets, care must be taken not to exceed the maximum packet size of the underlying provider, which can be obtained by using getsockopt to retrieve the value of socket option SO_MAX_MSG_SIZE. If the data is too long to pass atomically through the underlying protocol, the error WSAEMSGSIZE is returned, and no data is transmitted.
“the error WSAEMSGSIZE is returned” ?? 我说了返回值是12M,而并不是WSAEMSGSIZE“no data is transmitted” ?? 但是我发送的12M的包客户端完整的接收到了。
SOCKET sock;
sock = accept(...);
这样得到的SOCKET是非阻塞的吗??2.服务器端send()立刻返回,但客户端recv()要等一会儿才能收到
SOCKET sock;
sock = accept(...);
这样得到的SOCKET是非阻塞的吗??
----------------------------------------
这要看建立监听程序是不是阻塞才可确定。
我的监听程序是先声明一个SOCKET,然后bind(),然后listen(),然后accept()。在这个过程中使用的都是最基本的调用方式,没有使用任何的select(),完成端口,重叠I/0等。这样的默认应该是阻塞式的吧??
也就是IP地址是127。0。0。1,
那么非常正常,因为本地环路的传递速度可以达到30M/S以上,如果CPU性能够强,还能更快,
所以你一次SEND,还来不及缓冲满就已经被发送光了。
出现的情况,
1,假设现在文员正空闲呢(缓冲区没有数据,或者缓冲区的数据大于你的buffer),然后文员说,交给我吧,你回去吧,这就是为什么马上返回的原因
2,假设现在文员手头有很多buffer没发呢,文员告诉你,你等着,我前面的还没有发完,你在这阻塞一会吧,等我发完了前面的,待我的缓冲大于你的buffer的时候再。。应该就是这个意思,文员假设在规定时间内没有发送完成,应该回来告诉你发送失败的,只是这个我不知道怎么做