Linux网络编程
Linux是目前最流行的开源操作系统,网络功能在Linux下占核心地位,本专栏循序渐进从应用层到内核,从基础知识到综合实例,向读者介绍如何在Linux系统下进行网络编程设计。
奔跑吧,行者
这个作者很懒,什么都没留下…
展开
-
Linux网络编程--epoll 模型原理详解以及实例
1.简介Linux I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。Linux 2.6内核中有提高网络I/O性能的新方法,即epoll 。 epoll是什么?按照man手册的说法是为处理大批量句柄而作了改进的poll。要使用epoll只需要以下的三个系统函数调用: epoll_create(2),epoll_ctl(2),epoll_wait(2)。原创 2015-10-08 16:53:46 · 13118 阅读 · 3 评论 -
Linux网络编程--信号阻塞与屏蔽(block,unblock)
Linux下当向一个进程发出信号时,从信号产生到进程接收该信号并执行相应操作的过程称为信号的等待过程(呃,根据对APUE的理解翻译的)。如果某一个信号没有被进程屏蔽,则我们可以在程序中阻塞进程对该信号所相应的操作。例如一个程序当接收到SIGUSR1信号时会进行一个操作,我们可以利用系统API阻塞(block)程序对该信号的操作,直到我们解除阻止。再举个现实的例子:就好像一个同学让我帮他带饭,但是我现原创 2015-09-10 15:02:10 · 3679 阅读 · 0 评论 -
Linux网络编程--IO模型基础
IO的方式有阻塞IO、非阻塞IO模型、IO复用、信号驱动、异步IO等,本文以UDP为例大概介绍这几种IO模型的基础知识和原理。 1.阻塞IO 阻塞IO是最通用的IO类型,使用这种模型进行数据接收的时候,在数据没有到之前程序会一直等待。 2.非阻塞IO模型 3.IO复用 4.信号驱动IO模型 5.异步IO模型原创 2015-09-10 16:33:11 · 1911 阅读 · 0 评论 -
Linux网络编程--select()和pselect()函数
函数select()和pselect()用于IO复用,它们监视多个文件描述符的集合,判断是否有符合条件的时间发生。 1.select()函数 函数select()与之前的recv()和send()直接操作文件描述符不同。使用select()函数可以先对需要操作的文件描述符进行查询,查看是否目标文件描述符可以进行读、写或者错误操作,然后当文件描述符满足操作的条件的时候才进行真正的IO操作。 se原创 2015-09-10 17:14:44 · 12662 阅读 · 2 评论 -
Linux网络编程--poll()和ppoll()函数
poll()函数 ppoll()函数原创 2015-09-11 10:48:16 · 9272 阅读 · 0 评论 -
Linux网络编程--非阻塞编程
非阻塞方式程序设计介绍非阻塞方式的操作与阻塞方式的操作最大的不同点是函数的调用立刻返回,不管数据是否成功读取或者成功写入。使用fcntl()将套接字文件描述符按照如下的代码进行设置后,可以进行非阻塞的编程: fcntl(s, F_SETFL, O_NONBLOCK); 其中的s是套接字文件描述符,使用F_SETFL命令将套接字s设置为非阻塞方式后,再进行读写操作就可以马上返回了。非阻塞程序设计的原创 2015-09-11 11:24:48 · 2667 阅读 · 1 评论 -
Linux网络编程--文件空间映射mmap函数
/*使用mmap对文件进行操作*/#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/mman.h>/*mmap*/#include <string.h>/*memset warning*/#include <stdio.h>#define FILELENGTH 80int main(vo原创 2015-08-20 11:38:25 · 1835 阅读 · 1 评论 -
Linux网络编程--文件属性fcntl函数
/*使用fcntl控制文件符*/#include <unistd.h>#include <fcntl.h>#include <stdio.h>int main(void){ int flags = -1; int accmode = -1; /*获得标准输入的状态的状态*/ flags = fcntl(0, F_GETFL, 0); if( flags <原创 2015-08-20 12:56:05 · 2049 阅读 · 0 评论 -
Linux网络编程--获取文件状态信息fstat函数
/*使用stat获得文件的状态*/#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int main(void){ struct stat st; if( -1 == stat("test.txt", &st)){ printf("获得文件状态失败\n"); return -1; }原创 2015-08-20 13:16:13 · 2053 阅读 · 0 评论 -
Linux网络编程--IO函数以及示例
网络数据能够正确到达用户并被用户接收是进行网络数据传输的基本目的, 网络数据的接受和发送有很多种方案,例如:直接发送和接收,通过向量发送和接收,使用消息发送和接收等。本篇文章主要介绍常用的IO函数以及用法,如:最常用的read()/write()函数,和其他标准的套接字专用函数recv()/send(),readv()/writev(),recvmsg()/sendmsg()。 各个函数原型以及介原创 2015-08-28 16:32:04 · 1627 阅读 · 0 评论 -
Linux网络编程--协议的名称以及类型等处理
为了网络编程的便捷,系统提供了一组用于查询协议的值以及名称的函数,本篇文章主要介绍协议族函数的使用方法和注意事项。 下面用一段代码介绍函数的使用方法:#include <netdb.h>#include <stdio.h> /* 显示协议的项目 */void display_protocol(struct protoent *pt){ int i = 0; if(pt){原创 2015-08-27 15:29:52 · 2826 阅读 · 0 评论 -
Linux网络编程--IP地址与域名解析(DNS)
在日常生活中,人们往往知道主机的域名而不知道主机的IP地址,而socket的API均基于IP地址,所以需要使用DNS域名解析服务器进行解析。 那么首先简单介绍一下DNS的原理,DNS服务器系统是按树形的结构构造,顶级域名服务器下分多个二级域名服务器,二级域名服务器下面又分多个下级域名服务器,每个服务器都下辖了一些主机,如图所示: 那么一个主机是如何查询一个域名的IP地址呢?首先需要想本地的域原创 2015-08-27 12:00:58 · 9771 阅读 · 0 评论 -
Linux网络编程--自定义套接字描述符判定函数issockettype
套接字描述符和通用文件描述符在形式上没有区别,那么如何判断一个文件描述符是否是套接字描述符呢?下面我们就简单的自定义一个函数issockettype,用于套接字描述符判定。#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <stdio.h>#include <sys/types.h>#include原创 2015-08-27 10:44:47 · 1628 阅读 · 0 评论 -
Linux网络编程--字符串IP和二进制IP转换
一:不安全的(不可重入性)inet_xxx()函数族由于计算机理解的IP都是以二进制形式保存的,那么在网络程序设计中经常会需要字符串IP和二进制IP的转换,linux系统有一组要用于网络地址转换的函数,如下: #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h>原创 2015-08-25 14:02:50 · 9313 阅读 · 0 评论 -
Linux网络编程--TCP网络编程基础(简单的server/client模型)
本文主要讲解C/S模型,对服务器端和客户端的流程和函数的使用进行解析,以及网络编程中对信号的处理,特别是由于连接关闭而产生的SIGPIPE信号和终止进程而产生的SIGINT信号,当然截取信号并进行处理是程序稳定性的基本要求。TCP网络编程中常用的函数主要有:socket(),bind(),listen(),accept(),read(),write(),connect(),close();服务器端原创 2015-08-24 15:25:18 · 3130 阅读 · 0 评论 -
Linux网络编程--字节序
1 .谈到字节序,那么会有朋友问什么是字节序 很简单:【例如一个16位的整数,由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序的问题。】2 .那么什么是高字节、低字节? 也相当简单:【一个16进制整数有两个字节组成,例如:0xA9。 高字节就是指16进制数的前8位(权重高的8位),如上例中的A。 低字节就是指16进制数的后8原创 2015-08-25 11:01:03 · 2136 阅读 · 2 评论