recvfrom问题记录

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">    偶然情况下recvfrom函数出现了不正常的情况,目前还没有复现。</span>

贴出部分的代码和日志问价里面的信息。

struct timeval tv_out;

tv_out.tv_sec = 120;
tv_out.tv_usec = 0;

setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv_out, sizeof(tv_out));

 udp_media_cond = 1;

    while(udp_media_cond)
    {
        memset(buf, 0, sizeof(buf));
        memset(temp, 0, sizeof(temp));
        len = recvfrom(sockfd, buf, sizeof(buf), 0, (struct sockaddr *)&client_addr_from, &fromlen);

        if (0 >= len)
        {
            syslog(LOG_DEBUG, "DEBUG:recv data error!");
            syslog(LOG_DEBUG, "DEBUG:uid is '%s', port is '%d'.", uid, port);
            if (EAGAIN == errno)
            {
                syslog(LOG_DEBUG, "DEBUG: EAGAIN!");
                //return 0;
            }
        }

        buf[len] = '\0';
}

日志里面的打印:

Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:uid is '00060110', port is '5500'.
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG: EAGAIN!
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:uid is '00060110', port is '5500'.
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:uid is '00060110', port is '5500'.
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:uid is '00060110', port is '5500'.
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:uid is '00060110', port is '5500'.

后面那个打印了十几W条

Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf rsyslogd-2177: imuxsock begins to drop messages from pid 2218 due to rate-limiting
Oct 27 12:26:22 32f32c8c-8c75-4249-bbf2-afa068de9aaf rsyslogd-2177: imuxsock lost 176521 messages from pid 2218 due to rate-limiting

正常的情况是不会有这些的打印,打印

Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG: EAGAIN!

是因为过了2分钟,没有收到任何数据。

狂打印

Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:16 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:uid is '00060110', port is '5500'.

就是不正常的,除非开始接受数据,每次接受的数据为为空。

这个线程最后是死掉了,过了一段时候后

Oct 27 12:26:22 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:22 32f32c8c-8c75-4249-bbf2-afa068de9aaf rsyslogd-2177: imuxsock begins to drop messages from pid 2218 due to rate-limiting
Oct 27 12:26:29 32f32c8c-8c75-4249-bbf2-afa068de9aaf rsyslogd-2177: imuxsock lost 3408 messages from pid 2218 due to rate-limiting
Oct 27 12:26:29 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:recv data error!
Oct 27 12:26:29 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG:uid is '00060001', port is '5501'.
Oct 27 12:26:29 32f32c8c-8c75-4249-bbf2-afa068de9aaf server_debug:[2218]: DEBUG: EAGAIN!

主线程收不到任何的数据,也有可能是客户端没有发送(可能性极小),该线程再也没有任何打印。

时间: 2024-10-14 07:50:14

recvfrom问题记录的相关文章

Linux进程间通信 -- 数据报套接字 socket()、bind()、sendto()、recvfrom()、close()

前一篇文章,Linux进程间通信——使用流套接字介绍了一些有关socket(套接字)的一些基本内容,并讲解了流套接字的使用,这篇文章将会给大家讲讲,数据报套接字的使用. 一.简单回顾——什么是数据报套接字 socket,即套接字是一种通信机制,凭借这种机制,客户/服务器(即要进行通信的进程)系统的开发工作既可以在本地单机上进行,也可以跨网络进行.也就是说它可以让不在同一台计算机但通过网络连接计算机上的进程进行通信.也因为这样,套接字明确地将客户端和服务器区分开来. 相对于流套接字,数据报套接字的

套接字之recvfrom系统调用

recvfrom系统调用通过用户传入的接收空间构造msghdr,并且调用sock_recvmsg,该函数调用socket操作的recvmsg函数sock->ops->recvmsg,ipv4对应的是inet_recvmsg,该函数调用传输层的sk->sk_prot->recvmsg来接收数据,如tcp则调用tcp_recvmsg,接收完成之后记录地址结构长度信息: 1 /* 2 * Receive a frame from the socket and optionally rec

老男孩Linux运维第41期20170917开班第四周学习重点课堂记录

第1章 必知必会文件 配置文件位置 该文件作用 /etc/sysconfig/network-scripts/ifcfg-eth0 第一块网卡的配置文件 同setup中的network /etc/resolv.conf 客户端DNS配置文件,优先级低于网卡配置文件 /etc/hosts 主要作用是定义IP地址和主机名的映射关系(域名解析),是一个映射IP地址和主机名的规定 /etc/sysconfig/network 用于配置hostname和networking /etc/fstab 开机自动

SSISDB8:查看SSISDB记录Package执行的消息

在执行Package时,SSISDB都会创建唯一的OperationID 和 ExecutionID,标识对package执行的操作和执行实例(Execution Instance),并记录operation message,统计executable的执行时间,便于developers 优化package的设计,对package进行故障排除. 一,在package发生错误时,查看失败的Executable An executable is a task or container that you

使用插件bootstrap-table实现表格记录的查询、分页、排序等处理

在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有名的开源表格插件,在很多项目中广泛的应用.Bootstrap-table插件提供了非常丰富的属性设置,可以实现查询.分页.排序.复选框.设置显示列.Card view视图.主从表显示.合并列.国际化处理等处理功能,而且该插件同时也提供了一些不错的扩展功能,如移动行.移动列位置等一些特殊的功能,插件可

Git 使用记录

在win7平台已经安装好了git的情况下: 1,Git 本地仓库建立与使用步骤: (2)新建立文件夹: $ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit (1)引入git: 通过git init命令把这个目录变成Git可以管理的仓库: $ git init Initialized empty Git repository in /Users/michael/learngit/.git/ (3)添加文件:git add fil

前端学HTTP之日志记录

前面的话 几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要.这么做出于一系列的原因:跟踪使用情况.安全性.计费.错误检测等等.本文将谥介绍日志记录 记录内容 大多数情况下,日志的记录出于两种原因:査找服务器或代理中存在的问题(比如,哪些请求失败了),或者是生成Web站点访问方式的统计信息.统计数据对市场营销.计费和容量规划(比如,决定是否需要增加服务器或带宽)都非常有用 可以把一个HTTP事务中所有的首部都记录下来,但对每天要处理数百万个事务的服务器和代理来说,这些数据的体积超大,很

ClientDataSet中动态添加计算字段并用计算字段显示记录的UpdateStatus

ClientDataSet中每条记录都有UpdateStatus=(usUnmodified, usModified, usInserted, usDeleted)记录该条数据是修改的,删除的,还是新增的等.有时候我们只想看修改的或新增的或删除的就可能用到这一属性.下图用计算字段显示UpdateStatus状态. ********************************************************************************************

MySQL删除重复记录的方法

参考网上的方法,总结了产出重复记录的方法,欢迎交流. 方法1:创建一个新表临时储存数据 假设我们有一个存在多个字段的表,表中有部分数据的若干字段重复,此时我们可以使用DISTINCT这个关键字对表数据进行筛选. 1 CREATE [TEMPORARY] TABLE temp LIKE origin_tb; 2 INSERT temp(attr1,attr2,...) SELECT DISTINCT attr1,attr2,... FROM origin_tb; 3 DELETE FROM ori