一,区别
什么是阻塞式
1,在创建一个套接字后,默认的都是阻塞式的。
Winsocket的IO函数比如:Send和Recv,必须等待函数完成相应的I/O操作后,才能继续。
什么是非阻塞式
1,通过调用ioctisocket(SCOKET s,long cmd,u_long *arpy)函数,改变套接字的模式。
U-long nNoBlock = 1;
loctisocket(s,FLONBIO,&nNoBlock);
2,无论操作是否完成吗非阻塞式函数都会立即返回。
例如,在非阻塞模式下调用recv接收数据时,程序会直接读取网络缓冲区中的数据,无论是否读到数据,函数都会立即返回。
二,关键函数
非阻塞式套接字设定
int iMode = 1; //为1是表示非阻塞 0表示阻塞
nRet = ioctisocket(hSocket,FIONBIO,(u_long FAR*)&iMode); //第二个类型为FIONBIO表示可用
三,代码
// 非阻塞式.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#define BUF_MAXSIZE 225
#include "winsock2.h" //WinSock2的头文件winsock2.h
#pragma comment(lib, "ws2_32.lib") //导入库文件ws2_32.lib,链接WinSock导入库
#incl