第9月第12天 lua_push lua_to luaL_check

1.

c代码中通过lua_push 把数据压入堆栈。luaL_check是对lua_to的封装,从堆栈中获取lua代码中函数调用的数据。

static int
lread(lua_State *L) {
    struct socket * s = lua_touserdata(L,1);
    if (s == NULL || s->listen_fd < 0) {
        return luaL_error(L, "start socket first");
    }
    size_t sz = 0;
    const char * welcome = luaL_checklstring(L,2,&sz);
    int fd = test(s, welcome,sz);
    if (fd >= 0) {
        char buffer[BUFFER_SIZE];
        int rd = recv(fd, buffer, BUFFER_SIZE, 0);
        if (rd <= 0) {
            s->closed = 1;
            lua_pushboolean(L, 0);
            return 1;
        }
        lua_pushlstring(L, buffer, rd);
        return 1;
    }
    return 0;
}
static int
lstart(lua_State *L) {
    const char * addr = luaL_checkstring(L,1);
    int port = luaL_checkinteger(L,2);

    struct socket * s = lua_newuserdata(L, sizeof(*s));
    s->listen_fd = -1;
    s->fd = -1;
    s->closed = 0;

    int lfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    int reuse = 1;
    setsockopt(s->listen_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&reuse, sizeof(int));

    struct sockaddr_in service;

    service.sin_family = AF_INET;
    service.sin_addr.s_addr = inet_addr(addr);
    service.sin_port = htons(port);

    if (bind(lfd, (const struct sockaddr *)&service, sizeof(service)) < 0) {
        closesocket(lfd);
        printf("bind() failed");
        exit(1);
    }
    if (listen(lfd, 1) < 0) {
        printf("listen(): Error");
        exit(1);
    }
    s->listen_fd = lfd;

    return 1;
}
function ldebug.start(host)
    local ip = (host and host.ip) or "127.0.0.1"
    local port = (host and host.port) or 6789
    socks_fd = csock.start(ip , port)
end

function readline()
    local ret = split()
    if ret then
        return ret
    end
    local data = csock.read(socks_fd, socks_prompt)
    if data then
        socks_buffer = socks_buffer .. data
        return split()
    end

    return data
end

2.quick

http://cocos2d-lua.org/download/3-6-4.md

https://github.com/u0u0/Quick-Cocos2dx-Community

时间: 2024-08-22 11:23:11

第9月第12天 lua_push lua_to luaL_check的相关文章

2014年7月11~12日,杨学明老师《软件测试管理》公开课(深圳站)成功举办!

2014年7月11~12日,<在软件开发流程中构筑软件质量—软件测试管理>公开课在深圳市CBD某酒店准时开课,来自智能电视.软件.手机.汽车电子.芯片.IT系统集成等企业的研发总监和测试部门经理等参加了此次培训,此次培训由研发管理资深顾问.产品测试专家杨学明先生主讲,本次课程采用全程案例分析讲解,让学员从一开始就融入到软件测试的场景中去,根据测试中所遇问题进行针对性讲解和讨论:课堂上许多企业都提出了很多高难度和有挑战性的问题,杨老师耐心地为各企业学员进行解答,很多学员代表表示对解决方案非常满意

一起赚美元 | 通过一个小工具月入12万美元的秘诀

本文为一篇采访文章,翻译并推荐给大家 推荐理由:1.从自身小需求出发,先开发出满足自己需求的产品,然后将这个产品开放给市场.2.非常小的细分市场,也有可能做到年入百万美元.从小工具入手是非常好的思路.3.做边际成本递减的事,尽可能产品化与自动化.4.增长黑客的一个很棒的案例. 另外,你是否也发现了一些工具网站很小,但是却赚钱很厉害? ------ 译者:一只椰子 知识星球链接:https://t.zsxq.com/iAiIyfm 本文的主人公叫迈克,他在采访里面提到,自动化工具这一法宝已经轻松帮

第8月第12天 python json.dumps

1.json.dumps return JsonResponse({ 'status': WechatMessage.POST_METHOD_REQUIRED[1], 'status_code': WechatMessage.POST_METHOD_REQUIRED[0] }) import json from django.shortcuts import HttpResponse def JsonResponse(params): return HttpResponse(json.dumps

2014年12月6~12月7日,杨学明老师《软件测试管理及调优实务》内训在苏州某网络企业成功举办!

2014-12-6~7日,共创力企业管理咨询为苏州某高科技企业提供了为期两天的<软件测试管理及调优实战>培训.此次培训由共创力研发咨询资深讲师杨学明先生主讲,杨老师在课前对客户的培训需求进行了充分的收集和了解,并与部分学员代表进行了沟通和交流,充分把握了课程中的的培训需求.两天的课程大家充分学习了软件测试管理.设计和软件性能测试调优及软件安全测试管理的内容,课程结束后,大家对课程给予了较高评价,收获较大,可以马上应用到工作中去,該公司将继续与杨老师合作,引进其他管理课程.

5月10~12 分页及分页查询

分页的类:page.class.php <?php /** file: page.class.php 完美分页类 Page */ class Page { private $total; //数据表中总记录数 private $listRows; //每页显示行数 private $limit; //SQL语句使用limit从句,限制获取记录个数 private $uri; //自动获取url的请求地址 private $pageNum; //总页数 private $page; //当前页 p

第32月第12天 block stop

1. - (NSMutableArray *)filterUsingBlock:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))block { if (!block) { return [self mutableCopy]; } NSMutableArray *result = [NSMutableArray array]; NSUInteger idx = 0; BOOL stop = NO; for (id obj in self) { if (b

从零开始学习Linux时间2019年9月9-9.12

别名功能:             配置文件保存路径: /etc/profile      ----配置变量/环境变量/配置别名信息      命令  别名信息  ='替代的命令信息'            永久设置:                      vi/etc/profile 输入: 命令  别名信息  ='替代的命令信息'        取消别名设置:         一: 将文件配置注释或者删除          --- 永久取消别名         二: 利用命令操作  un

第41月第12天 活体检测

1. - 动作配合式活体检测:给出指定动作要求,用户需配合完成,通过实时检测用户眼睛,嘴巴,头部姿态的状态,来判断是否是活体. - H5视频活体检测:用户上传一个现场录制的视频,录制时读出随机分配的语音校验码.然后通过分析这个视频的人脸信息以及语音校验码是否匹配,完成活体检测判断. - 静默活体检测:相对于动态活体检测方法,静默活体检测是指,不需要用户做任何动作,自然面对摄像头3.4秒钟即可.由于真实人脸并不是绝对静止的, 存在微表情,如眼皮眼球的律动.眨眼.嘴唇及周边面颊的伸缩等,可通过此类特

2015年12月国内浏览器市场份额:IE卫冕失败

IDC评述网(idcps.com)01月05日报道:根据百度统计的最新数据显示,在2015年12月国内浏览器市场上,Chrome打败IE,以36.80%份额夺冠,相比11月份的36.49%,增加0.31%.而IE则退至第2,份额36.16%,较11月减少0.55%.接下来,请看IDC评述网整理的详细数据情况. (图1)2015年12月国内浏览器市场份额分布图 如图1所示,在2015年12月份,国内浏览器市场份额前6强排名顺序,环比同年11月份,发生细微变动.Chrome取代IE成为霸主,IE则跌