栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

windows重叠IO和event模型

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

windows重叠IO和event模型

//#include
#include
#include
#pragma comment(lib,"ws2_32.lib")
using namespace std;

int main() {
	WSADATA wsaData;
	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
		cout << "wsastart faild<ulong
	//inet_ntoa(in_addr in)->char
	//htons short
	//htonl long
	//ntohs short
	//
	addr.sin_family = AF_INET;
	addr.sin_port = htons(port);
	addr.sin_addr.s_addr = htonl(INADDR_ANY);
	errCode = bind(server, (SOCKADDR*)&addr, addr_len);
	if (errCode == SOCKET_ERROR) {
		cout << "bind failed" << endl;
		return 1;
	}

	if (listen(server, 3) == SOCKET_ERROR) {
		cout << "listen error" << endl;
		exit(2);
	}
	SOCKET sock = accept(server, NULL, NULL);
	WSAEVENT events[128];

	events[0] = WSACreateEvent();
	WSAEventSelect(sock, events[0], FD_READ);


	WSAOVERLAPPED overlap;

	DWORD len = 0;
	DWORD flag = 0;
	WSABUF buf;
	char buffer[2048];
	ZeroMemory(buffer, 2048);
	ZeroMemory(&overlap, sizeof overlap);
	buf.buf = buffer;
	buf.len = 2048;
	cout << "enter while" << endl;
	while (1) {
		if (WSARecv(sock, &buf, 1, &len, &flag, &overlap, NULL) == SOCKET_ERROR) {
			if (WSAGetLastError() != WSA_IO_PENDING) {
				cout << "fatal error" << endl;
			}
		}
		DWORD len2 = 0, flag2 = 0;
		int idx = WSAWaitForMultipleEvents(1, events, false, WSA_INFINITE, false);//这个会永久等待
		cout << "test" << endl;
		WSAGetOverlappedResult(sock, &overlap, &len2, false, &flag2);
		if (len2 == 0) {
			cout << "sock close" << endl;
			WSACloseEvent(events[idx - WSA_WAIT_EVENT_0]);
			break;
		}
		cout << buffer << endl;
		WSAResetEvent(events[idx - WSA_WAIT_EVENT_0]);
		flag = 0;
		ZeroMemory(&overlap, sizeof overlap);


		buffer[30] = '';


	}
	return 0;


}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/312118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号