首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

云通信 IMSDK 日志格式说明

IMSDK 整理关键路径上的日志格式,方便开发者根据指引自查一些常见问题,通用的日志格式如下: 事件|阶段|成功|成功获取到的关键信息 事件|阶段|失败|code=错误码, msg=错误信息 事件|阶段...登录 成功的登录流程: Login|1-Begin|Succ|identifer=xx, sdkappid=xx, ......|call user forceoffline callback 步骤 说明 1-Recv 从QAL收到被踢消息 2-Logout 内部Logout成功 3-Callback 回调用户,如果用户没有设置...例如,按照关键词过滤,抛出4条消息的日志: [16-08-30 16:41:48][INFO][][IMCoreNotify]RecvMsg|4-Callback|Succ|type=C2C, sid=...未读数 UpdateMsgReadedSeq 未读上报 msg_unread 用户掉线 sso_conn.cc 版本查询 Versioin 发送群消息 group_open_svc.group_msg_send

1.9K40

Linux网络编程基础API

recv 成功时返回实际读取到的数据的长度,它可能小于我们期望的长度len。因此我们可能要多次调用recv,才能读取到完整的数据。recv 可能返回0,这意昧着通信对方已经关闭连接了。...recv 出错时返回-1并设置errno。 send往sockfd上写入数据,buf和len参数分别指定写缓冲区的位置和大小。send成功时返回实际写人的数据的长度,失败则返回-1并设置ermo。...对于recvmsg而言,数据将被读取并存放在msg_ jiovlen 块分散的内存中,这些内存的位置和长度则由msg_iov指向的数组指定,这称为分散读(satter read);对于sendmsg而言...recvmsg/sendmsg的flags 参数以及返回值的含义均与send/recv的flags参数及返回值相同。 外带标记 在实际应用中,我们通常无法预期带外数据何时到来。...getnameinfo和getaddrinfo函数成功时返回0,失败时返回错误码,可能的错误码如表: Linux下strerror函数能将数值错误码error转换成易读的字符串形式,同样下面的函数可将表错误码转换成字符串形式

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    socket的简单使用概念socket通信过程,使用步骤:导入头文件创建socket函数connect连接到服务器发送数据接收服务器返回的数据关闭连接例子:请求百度

    Socket是纯C语言的,是跨平台的。 HTTP协议是基于Socket的,HTTP协议的底层使用的就是Socket ?...char sin_zero[8]; }; 参数二sockaddr的长度,可以通过sizeof(struct sockaddr)获得 返回值:成功则返回0,失败返回非0,错误码GetLastError(...send 不包含传送失败的提示信息,如果检测到本地错误将返回-1。因此,如果send 成功返回,并不必然表示连接另一端的进程接收数据。...所保证的仅是当send 成功返回时,数据已经无错误地发送到网络上。...sizeof ( ) 是否阻塞,一般填0 返回值:成功则返回实际传送出去的字符数,失败返回-1,错误原因存于errno 中。

    1.9K70

    赛前福利②最新2018HITB国际赛writeup

    先申请一个gundam2,分配给它的0x300堆块便是tcache里的那块A,假设我们将它的fd指针设置为free_hook地址。...(此外,上述我们应该多在tcache里设置几块堆,因为tcache会记录当前tcache块数量) 基本原理清楚了,这个题就简单了。...然后就调用f2的逆向算法,求出输入的int变量 ? 大致的算法如上图所示,一次求出2组。这里一开始我也犯了错误,忽视了带符号的值,导致flag只出来了一半。...然后有一个auth是输出正确或错误的,其值根据check函数的返回值来确定。...由于不清楚kivy的实现机制,这个方法能成功的原因应该是base64定义的代码优先执行,这样上面那个假check就不会执行。 ?

    1.1K40

    socketpair原理_pair of shoes意思

    如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接字可以用于全双工通信,每一个套接字既可以读也可以写。...返回值:成功返回发送的字节数,出错返回-1 recvmsg函数 定义函数 int recvmsg(int s, struct msghdr *msg, unsigned int flags); 函数说明...返回值:成功则返回接收到的字符数, 失败则返回-1, 错误原因存于errno 中. send函数 定义函数:int send(int s, const void * msg, int len, unsigned...}; 返回值:成功则返回实际传送出去的字符数, 失败返回-1, 错误原因存于errno 错误代码: 1、EBADF 参数s 非合法的socket 处理代码. 2、EFAULT 参数中有一指针指向无法存取的内存空间...recvmsg err\n"); return -1; } printf("接收成功!

    39910

    socketpair函数用法

    如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。 基本用法: 1. 这对套接字可以用于全双工通信,每一个套接字既可以读也可以写。...返回值:成功返回发送的字节数,出错返回-1 recvmsg函数 定义函数 int recvmsg(int s, struct msghdr *msg, unsigned int flags); 函数说明...返回值:成功则返回接收到的字符数, 失败则返回-1, 错误原因存于errno 中. send函数 定义函数:int send(int s, const void * msg, int len, unsigned...返回值:成功则返回实际传送出去的字符数, 失败返回-1. 错误原因存于errno....}; 返回值:成功则返回实际传送出去的字符数, 失败返回-1, 错误原因存于errno 错误代码: 1、EBADF 参数s 非合法的socket 处理代码. 2、EFAULT 参数中有一指针指向无法存取的内存空间

    2.3K30

    ptmalloc cheatsheet

    ; 由于 fastbin 是按照最小 chunk 对齐大小增长的,因此从 fastbin 中分配的块必然是 exact fit 的,即申请 chunk 大小与 bin 大小完全一致; LIFO,这是为了提升...TCache Bin tcache 也是个缓存,本身就是个数组,比 fastbin 快那么一丢丢,但胜在支持的尺寸多。...0x10,实际尺寸到索引通过 csize2tidx 计算; 最大的 bin 支持的大小为 0x410,实际用户申请的大小要减去头部和对齐; 其实 tcache 从 2.26 加入 glibc 之后,其结构和代码逻辑都发生了很大的变化...早期什么检查都没有,但每一代都会新增一些校验,导致 tcache 已经不是那么好利用了,所以现在基本上都是先将其填满,然后再去利用常规方法进行利用。 算法 这里简单把堆分配和释放的过程记录下来。...; 兜底方案,从 top_chunk 中分裂出新的块并返回; 关于 tcache 的横刀夺爱: 在第 2 和 第 3 步,相同大小的其他块也会取出放到对应的 tcache bin 中; 在 5.3 步,

    24930

    对上一篇文章中tcp问题的进一步思考

    上篇文章 一个有关tcp的非常有意思的问题 中我们讲到,在tcp建立连接后,如果一端关闭了连接,另一端的第一次write还是可以写成功的,文章中也分析了造成这种现象的具体原因。...其实具体结果已经在read的man文档中有详细介绍,不过我们还是从源码角度来证实下: // net/ipv4/tcp.c int tcp_recvmsg(struct sock *sk, struct...socket中的未读字节读出来,并返回拷贝的字节数给用户,表示此次read成功。...如果我们把socket中的数据都读完了,然后检测到了最后的fin包,此时直接跳出read循环,返回copied的值(此时是0)给用户。...也就是说,当我们的socket收到fin包之后,监听该socket的对应的epoll_wait方法会从阻塞状态中退出,并调用上面的tcp_poll方法,该方法检测到这个socket此时已经准备好的epoll

    56130

    记一次传递文件句柄引发的血案 (续)

    sendmsg 中的数据消息部分,用来兼容出错的场景(出错时可以提供一个-1~-255的错误码,及一段描述信息),关键信息位于控制部分。...参考上篇文章) 其它一些代码则用来处理出错信息,当出现错误时,调用 userfunc 打印错误信息 (用户一般传递 write) 。 另外接口中 uidptr 参数并没有用,这个是为将来扩展预留的。...使用之前的 demo (spipe_server.c / spipe_client.c)编译、运行,输出结果如下: ./spipe_server ....,看指针是否为空;第一条日志则是怀疑块大小计算有误,导致分配的内存不够大,指针递增时出现了范围错误,所以这里打印各种长度做验证。...崩溃点找到了,但是还是一头雾水,看起来数据块都对齐了,计算也没毛病,难道是这个系统提供的宏 (CMSG_NXTHDR) 出问题了吗?

    75530

    TCP之深入浅出send&recv

    如果send函数copy数据成功,就返回实际copy的字节数,如果send在copy数据时出现错误,那么send就返回SOCKET_ERROR;如果send在等待协议传送数据时网络断开的话,那么send...上图为send函数源码的调用逻辑图,对源码有兴趣的话,可以在net/tcp.c找到对应的实现。...应用层 应用程序调用读取或者 recv 的时候,该调用被映射到 /net/socket.c 中的sys_recv系统调用,然后调用 sock_recvmsg 函数。...未证实);如果是在发送端收到RST标志之前,则send像往常一样工作; 以上说的是非阻塞的send情况,假如send是阻塞调用,并且正好处于阻塞时(例如一次性发送一个巨大的buf,超出了发送缓存),对端...发送应用程序会不断的将余下的数据发送到网络上,但始终得不到确认,所以缓存区的可用空间持续为0,这种情况也需要应用程序来处理.

    5K72

    嵌入式笔试面试题目系列(二)

    1)malloc和free是c++/c语言的库函数,需要头文件支持stdlib.h;new和delete是C++的关键字,不需要头文件,需要编译器支持; 2)使用new操作符申请内存分配时,无需指定内存块的大小...3 、extern”C” 的作用 我们可以在C++中使用C的已编译好的函数模块,这时候就需要用到extern”C”。也就是extern“C” 都是在c++文件里添加的。...2.性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。...不同框架的处理器对齐方式会有不同,这个时候不指定对齐的话,会产生错误结果 12、inline函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗。...文字常量区,叫.rodata,不可以改变,改变会导致段错误 int a0=1; static int a1; const static a2=0; extern int a3; void fun(void

    71630

    socket接口api的深度探究

    一、socket接口使用 1.1 socket抽象层 Linux内核net/socket.c定义了一套socket的操作api。图1展示了socket层所处与TCP/IP协议栈之上和应用层之下。...其实使用fcntl()设置FD_CLOEXEC标志位(也就是用open()的时候设置的O_CLOEXEC标志位)也能达到同样的效果,但跟fcntl()有什么不同呢?...,recvmsg,read,readv。...这里看到进程发送完退出,会进入一段次数的退避重传(15次,共924秒,哪里配置的),然后没有FIN挥手过程。 send为什么成功的解释是,send只会探测到本地的错误,而不会探测到网络错误。...重试次数的配置: /proc/sys/net/ipv4/tcp_retries1    这个值影响由于某些错误引起的没有ACK的RTO重传和上报这些错误给网路层的时间。

    2.8K370

    Linux 命令(143)—— valgrind 命令

    这些工具中最受欢迎的称为 Memcheck。 它可以检测 C 和 C++ 程序中常见的许多与内存相关的错误,这些错误可能导致崩溃和不可预知的行为。...相反,它被标记为不可访问并放置在已释放块的队列中。 目的是尽可能推迟释放的内存重新进入循环的时间点。 这增加了 Memcheck 在块被释放后的一段时间内能够检测到对块的无效访问的机会。...此选项指定队列中块的最大总大小(以字节为单位)。 默认值为两千万字节。 增加此值会增加 Memcheck 使用的内存总量,但可能会检测到释放块的无效使用,否则这些释放块将无法检测到。...也就是说,它期望 free 用于释放 malloc 分配的块,delete 用于 new 分配的块,delete[] 用于 new[] 分配的块。 如果检测到不匹配,则会报告错误。...4.5 内存申请与释放函数不匹配 内存申请与释放函数不匹配,如 C++ 程序中使用 malloc 申请内存,但错误地使用 delete 去释放,那么 Valgrind 也可以检测出来。

    3.4K40

    图解 | 深入理解高性能网络开发路上的绊脚石 - 同步阻塞网络 IO

    因为 1.进程在 recv 的时候大概率会被阻塞掉,导致一次进程切换 2.当连接上数据就绪的时候进程又会被唤醒,又是一次进程切换 3.一个进程同时只能等待一条连接,如果有很多并发,则需要很多进程 如果用一句话来概括...所以我们今天先不讲优化,只深入分析同步阻塞网络 IO 的内部实现。 在上面的 demo 中虽然只是简单的两三行代码,但实际上用户进程和内核配合做了非常多的工作。...最后再调用 sk_wait_event 让出 CPU,进程将进入睡眠状态,这会导致一次进程上下文的开销。 接下来的小节里我们将能看到进程是如何被唤醒的了。...因为你的进程可能确实得等 Mysql 的数据返回成功之后,才能渲染页面返回给用户,否则啥也干不了。 注意一下,我说的是角色,不是具体的机器。...例如对于你的 php/java/golang 接口机,你接收用户请求的时候,你是服务端角色。但当你再请求 redis 的时候,就变为客户端角色了。

    52950

    C++17中具有显式对齐的分配函数:入门指南

    引言在C++ 发展的历程中,C++17 带来了诸多令人瞩目的特性,其中对内存对齐实现更细粒度的控制,无疑是一大亮点。...若未遵循此规则,不仅会影响内存访问效率,在某些特殊的硬件架构下,还可能引发严重错误,导致程序无法正常运行。在传统的 C++ 编程模式中,内存对齐工作大多由编译器自动完成。...因为缓存通常以特定大小的块为单位进行数据预取,如果数据存储位置符合对齐要求,CPU 可以更高效地从缓存中获取数据,减少缓存未命中次数,从而大大提高计算性能。...注意事项4.1 对齐要求的合理性在运用显式对齐分配函数时,程序员必须谨慎确定对齐要求的合理性。虽然较高的对齐要求在某些情况下可能会提升性能,但并非越高越好。过高的对齐要求可能导致内存分配失败。...因为系统可用于分配的连续内存块数量有限,过高的对齐要求会使满足条件的内存块更难找到。即使内存分配成功,过高的对齐要求也可能导致内存碎片化,降低内存利用率,进而影响程序的整体性能。

    10600

    图解 | 深入理解高性能网络开发路上的绊脚石 - 同步阻塞网络 IO

    因为 1.进程在 recv 的时候大概率会被阻塞掉,导致一次进程切换 2.当连接上数据就绪的时候进程又会被唤醒,又是一次进程切换 3.一个进程同时只能等待一条连接,如果有很多并发,则需要很多进程 如果用一句话来概括...所以我们今天先不讲优化,只深入分析同步阻塞网络 IO 的内部实现。 在上面的 demo 中虽然只是简单的两三行代码,但实际上用户进程和内核配合做了非常多的工作。...最后再调用 sk_wait_event 让出 CPU,进程将进入睡眠状态,这会导致一次进程上下文的开销。 接下来的小节里我们将能看到进程是如何被唤醒的了。...因为你的进程可能确实得等 Mysql 的数据返回成功之后,才能渲染页面返回给用户,否则啥也干不了。 注意一下,我说的是角色,不是具体的机器。...例如对于你的 php/java/golang 接口机,你接收用户请求的时候,你是服务端角色。但当你再请求 redis 的时候,就变为客户端角色了。

    30320
    领券