Skynet网络模型

接口:

// 创建epoll套接字 返回socket_server*上下文
struct socket_server * socket_server_create();
// 释放资源
void socket_server_release(struct socket_server *);
// IO循环
int socket_server_poll(struct socket_server *, struct socket_message *result, int *more);

// 通知退出,停止IO循环
void socket_server_exit(struct socket_server *);
// 关闭连接
void socket_server_close(struct socket_server *, uintptr_t opaque, int id);
// 开始将fd加入epoll列表
void socket_server_start(struct socket_server *, uintptr_t opaque, int id);

// return -1 when error
// 发送消息
int64_t socket_server_send(struct socket_server *, int id, const void * buffer, int sz);

// ctrl command below returns id 以下返回id
// 监听端口(为加入epoll列表)
int socket_server_listen(struct socket_server *, uintptr_t opaque, const char * addr, int port, int backlog);
// 创建非阻塞连接并加入epoll列表
int socket_server_connect(struct socket_server *, uintptr_t opaque, const char * addr, int port);
// 绑定某个fd到epoll列表
int socket_server_bind(struct socket_server *, uintptr_t opaque, int fd);

// 创建阻塞连接
int socket_server_block_connect(struct socket_server *, uintptr_t opaque, const char * addr, int port);


通过socket_server_create来创建epoll套接字,在同时也创建了管道,fd[2]并将它们绑定到socket_server上,并且将fd[0]加入epoll列表

	// 添加“读管道”到epoll管理列表
	if (sp_add(efd, fd[0], NULL)) {
		// add recvctrl_fd to event poll
		fprintf(stderr, "socket-server: can't add server fd to event pool.\n");
		close(fd[0]);
		close(fd[1]);
		sp_release(efd);
		return NULL;
	}
	// socket上下文
	struct socket_server *ss = MALLOC(sizeof(*ss));
	ss->event_fd = efd;		 // epoll套接字
	ss->recvctrl_fd = fd[0]; // 读管道
	ss->sendctrl_fd = fd[1]; // 写管道
	ss->checkctrl = 1;		 // 检查标志

这里的fd[1]也就是写管道,它用来向epoll列表中创建,监听,开始监听的一些操作
	// 连接127.0.0.1主机的80端口
	int c = socket_server_connect(ss,100,"127.0.0.1",80);
	// 监听127.0.0.1主机的8888端口
	int l = socket_server_listen(ss,200,"127.0.0.1",8888,32);
	// 加入epoll列表
	socket_server_start(ss,201,l);
	// 把标准输出加入epoll列表
	int b = socket_server_bind(ss,300,1);

其中的fd[0] fd[1]是阻塞的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值