winSOCK 同步和异布

琢石成器那本书看来的  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

同步:无包 等待 

异步:无包 返回

好像就这意思吧

//全信我 不如不信我  不管你们信不信 反正我不管

posted on 2011-08-18 16:10  我要穿越  阅读(306)  评论(0编辑  收藏  举报

导航