
network socket
Smith先生
全栈多媒体软件系统技术负责人与资深架构师,目前任职于国际大型半导体公司,拥有超过8年以上的音视频软件设计,产品开发与平台化交付经验。工作以来,带领了多个大型全新多媒体项目攻关开发,精进和优化了多个大型软件系统,成功完成平台化建设和运维,为多个技术公司构建了可持续迭代的软件生态,业务面设计GPU系统、人工智能、视频监控系统、会议系统、采集系统、数字电视、多媒体框架、播放器、流式计算及编解码加速等,拥有从上层到底层的全栈软件开发经验和技术团队建设和管理经验。学海无涯,山外有山,天外有天。同大部分技术人一样,希望每天保持进步,最终实现财富自由和人生理想。:)
展开
-
网络编程:讨论 Setsockopt函数(1)
1.如果在已经处于ESTABLISHED状态下的socket(一般由端口号和标识符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)转载 2012-03-06 14:04:58 · 1462 阅读 · 0 评论 -
WIFI基本知识整理
这里对wifi的802.11协议中比较常见的知识做一个基本的总结和整理,便于后续的学习。因为无线网络中涉及术语很多,并且许多协议都是用英文描述,所以有些地方翻译出来会有歧义,这种情况就直接英文来描述了。 主要内容:一、基本概述二、实践基础三、一些原理四、补充五、其它 一、基本概述 ============================1、有线和无转载 2013-03-30 20:46:25 · 54258 阅读 · 12 评论 -
TIME_WAIT状态引起的服务端重启失败问题
问题模型:server1为服务端,在本地的9999端口监听,server2相对server1是客户端,server2启动后首先向server1发起连接,然后再8888端口监听。程序代码不在列出。先后启动server1、server2,然后查看当前连接,如图1所示。图1.建立连接,正常之后强制结束server1(ctrl+c),再次查看当前连接状态,如图2所示。转载 2014-06-04 16:36:11 · 3723 阅读 · 0 评论 -
使用wireshark检测RTP丢包问题
一、RTP协议简介RTP 数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP 数据报都由头部(Header)和负载(Payload)两个部分组成,其中头部前12 个字节的含义是固定的,而负载则可以是音频或者视频数据。RTP 数据报的头部格式下图所示: RTP 数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP 数据报都由头部(Header原创 2014-02-17 16:39:33 · 48788 阅读 · 6 评论 -
Linux下使用nm命令排查和解决“undefined reference to ”
一、案例 编译出一个动态库.libXXXEngine.so。然后直接在另一个工程中,把头文件include进来,并link到该库:-lXXXEngine.尝试编译,出错:.//libXXXEngine.so:undefined reference to`CHttpParser::GetCurrentHttpMethod(http_method_t&)' .//l原创 2013-10-29 13:02:45 · 19945 阅读 · 0 评论 -
udev、热插拔和驱动模块加载
udev是Linux 2.6内核的设备管理器,它在/dev目录下动态地创建/移除设备节点。它是devfs和hotplug的继承者,运行在用户空间,并且用户可以用Udev规则来改变设备的命名。 udev依赖2.5内核引入的sysfs文件系统。sysfs是的设备在用户空间可见。每当一个设备被加入或移除,就会产生内核事件通知用户空间的Udev。 在早期的发行中常使用一个外部二进制文件/sbi原创 2013-02-17 11:40:57 · 4988 阅读 · 0 评论 -
Netlink实现热拔插监控 (
新的Linux内核使用udev代替了hotplug作为热拔插管理,虽然有udevd管理热拔插,但有时候我们还是需要在应用程序中检测热拔插事件以便快速地处理,比如在读写SD卡的时候拔下SD卡,那么需要立即检测出该情况,然后结束读写线程,防止VFS崩溃。Netlink是面向数据包的服务,为内核与用户层搭建了一个高速通道,是udev实现的基础。该工作方式是异步的,用户空间程序不必使用轮询等技术来检测热拔转载 2012-10-31 12:10:41 · 1927 阅读 · 0 评论 -
网络编程socket之bind、Listen 及 accept
1.bindbind函数用于将套接字与指定端口相连.本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号)。 头文件函数形原创 2013-07-15 22:10:47 · 34028 阅读 · 0 评论 -
libgupnp源码解读之对象框架与设备发现
libgupnp是一款开源的upnp软件。它采用gobject思想设计,实现了异步消息传递;用面向过程语言C实现了面向对象的框架。当然,最主要的是,它实现了通用即插即用协议UPNP,方便了很多数字家庭网络的应用开发者。 接下来,我先简单介绍下UPNP协议;接着从libgupnp的类设计结构图着手,以给大家提供框架上的认识;然后,我将分析upnp的设备发现部分在libgupnp中的设计与原创 2012-06-09 12:54:22 · 4045 阅读 · 0 评论 -
call transfer与call forward的比较(
call transfer和call forward都是指呼叫转移,但是转移的方式有所不同。 1.call transfer是呼叫接通和转移,就是指呼叫已经接通了,这个时候被叫方需要将呼叫转移到其它被叫,这个时候的呼叫转移是call transfer(呼叫后转)。对于在话机或界面上的操作,来说就是按一下挂机键,然后拨被转的号码。call transfer有两种方式,一种是直转,一种是选择转转载 2013-04-14 18:29:28 · 6064 阅读 · 0 评论 -
从网络编程实践中加深对TCP协议三次握手的理解
在一个 CLIENT/SERVER模型的网络应用中,客户端的调用序列大致如下: socket -> connect -> recv/send -> close。 (1)服务器调用socket, bind,Listen函数完成初始化后,调用accept阻塞等待,处于监听端口的状态。 (2)客户端调用socket初始化后,调用connect,发送原创 2013-04-12 16:43:10 · 1322 阅读 · 0 评论 -
TCP/UDP协议的边界性区别
面向无连接的 UDP协议是面向报文的有边界的报文的协议。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。 面向连接的TCP协议属于无边界的字节流协议,用户每次调用接收发送函数接口时,不一定都能接收发送一条完整的消息,而是必须对裸字节流进行拆分、组合(同于基于有边界报文的UDP协议的原创 2013-04-12 15:47:08 · 3028 阅读 · 0 评论 -
网络编程:讨论 Setsockopt函数(三)
有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了. 以下资料均从网上收集得到getsockopt 和 setsockopt获得套接口选项:int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln ) 设置套接口选项:转载 2012-03-06 16:06:06 · 1585 阅读 · 2 评论 -
网络编程:讨论linux下setsockopt (二)
功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。用法:#include转载 2012-03-06 14:15:16 · 3551 阅读 · 0 评论 -
"select一直返回0"的问题解决和总结
场景:一个简单的TCP 服务器我在linux平台下,创建一个TCP套接字,绑定到49156端口,向UPNP SERVER发一个subscribe订阅请求,超时时间设置为5minutes.然后开启一个Thread_Main主接收线程。该线程完成以下工作:(1)调用select监听是否有数据可读,设置4s的超时;(2)如果select返回值正常(>0),则调用accept,接收客户原创 2013-12-24 16:45:30 · 33369 阅读 · 7 评论