⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socket.cpp

📁 模仿wiondws写的linux/freeBSD系统的IOCP
💻 CPP
字号:
#include "socket.h"
Cmd *ksocket::unpack()
	{
		Scope_lock scope_lock(lock);
		Cmd *cmd;
		char *buffer;
		const unsigned int s = sizeof(*cmd);
		if(recv_buf.getrsize() < s)
			return NULL;

		char buf[s];
		recv_buf.fetch(buf,s);
		cmd = (Cmd*)buf;

		if(cmd->size > 108)
		{
			printf("error packet,size = %d\n",cmd->size);
			recv_buf.fetch(buf,s);
			cmd = (Cmd*)buf;
			return NULL;
		}

		if(recv_buf.getrsize() < cmd->size)
			return NULL;

		buffer = (char*)::operator new(cmd->size);

		recv_buf.get(buffer,cmd->size);

		return (Cmd*)buffer;
		
	}

	int ksocket::recv(unsigned int size)
	{
		Scope_lock scope_lock(lock);
		if(size == 0 || canRecv == false)
			return 0;
		size = size > recv_buf.getwsize() ? recv_buf.getwsize() : size;
		
		io_context[0].buf = recvbuf;
		io_context[0].rsize = size;
		io_context[0].userdata = this;
		io_context[0].handler = sockdl;
		io_context[0].type = IOREAD;

		Recv(sockdl,&io_context[0]);

		canRecv = false;


	}

	int ksocket::send(char *buf,unsigned int size)
	{
		Scope_lock scope_lock(lock);
		if(!buf || size == 0 || canSend == false)
			return 0;
		memcpy(sendbuf,buf,size);

		io_context[1].buf = sendbuf;
		io_context[1].rsize = size;
		io_context[1].userdata = this;
		io_context[1].handler = sockdl;
		io_context[1].type = IOWRITE;

		Send(sockdl,&io_context[1]);

		canSend = false;

	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -