琢石成器那本书看来的 572页
//全信书 不如不信书 不知道你们信不信 反正我是信了
同步和异步的不同 是取决于缓冲区的大小个发送数据大小
TCP send
同步: 当端口缓冲区不管是否能容下发送内容 都是发送完所有数据都 返回
异步 :当能容下发送数据的时候,发送全部数据后返回返回发送数据大小; 当缓冲区不能容下全部数据的时候,把能容下数据填入后返回 ,返回值是填入数据的大小 当缓冲区满的时候 讲返回ERROR_SOCKET WSAGETLASTERROR 将会的得到WSA E WOULD BLOCK 好像是怎么分的 WSA可能堵塞了
TCP recv
同步 :当没有数据的时候 不返回 有数据的时候 读取你设置缓冲区大小后 返回 可能端口缓冲区中还有数据 不是一次读完
异步 :如果没有数据 返回 ERROR_SOCKET WSAGETLASTERROR 将会的得到WSA E WOULD BLOCK 好像是怎么分的 WSA可能堵塞了
UDP sendto
同步:因为UDP包 是按照包单位发送的 当缓冲区中有内容 不能容下发送包的时候 会等待缓冲区能容下发送包的时候 发送完毕后 返回 是发送包的大小
注意: UDP 包有大小 如果你的数据包超过这个大小 将不会发送任何内容 切忌 windows下 #define SO_MAX_MSG_SIZE 0x2003 <-- 就这么大了
但是还有些问题 可以参考我转载的这个链接http://www.cnblogs.com/BeginGame/archive/2011/08/18/2144742.html
异步:如果没有足够的空间的话 将会直接返回 不会等待 返回 ERROR_SOCKET WSAGETLASTERROR 将会的得到WSA E WOULD BLOCK 好像是怎么分的 WSA可能堵塞了 注意 UDP包不会被当前层分割 就是分割也是在底层被分割
Recvfrom :
同步:无包 等待
异步:无包 返回
有包是 如果缓冲区没有UDP包大 只能获得缓冲区大小数据 返回ERROR_SOCKET 出错代码WSA E MSGSIZE 如果缓冲区大小大于UDP 讲获得UDP包大小
抄书抄到这里 突然发现
SEND
同步:不搞完 不算完
异步:能搞多少就多少
RECV
同步:无包 等待
异步:无包 返回
好像就这意思吧
//全信我 不如不信我 不管你们信不信 反正我不管