linux unix编程思想,Unix网络编程思想

本次博客主要总结参考《Unix网络编程》卷一前四章的知识,对TCP一对一通信进行重新改造和分析,经典就是经典,无可替代!

一、为什么使用包裹函数

任何现实世界的程序都必须检查每个函数调用是否返回错误。当某个函数发生错误时,就调用我们自己的err_quit或err_sys函数输出一个错误消息并终止程序的运行(当然有时候并非简单的终止程序运行,还需要检查问题所在:系统调用是否被中断了)。

既然发生错误时终止程序的运行时普遍的情况,我们可以通过定义包裹函数(wrapper function)来缩短程序。每个包裹函数完成实际函数的函数调用,检查返回值,并在发生错误时终止进程。我们约定包裹函数名是实际函数名的首字母大写形式。例如

listenfd=Socket(AF_INET,SOCK_STREAM,0);

包裹函数Socket定义为:

int Socket(int family,int type,int protocol)

{

int n;

if ((n = socket(family,type,protocol)) < 0)

err_sys("socket error");

return n;

}

因此,在UNP课程后面的所有例子中,我们建议使用包裹函数的形式,不仅缩短了代码,有利于开发者看清楚具体的功能实现;而且考虑了对于每一步的出错信息及处理,使代码更具有健壮性。

二、Unix errno值

只要一个Unix函数(例如某个套接字函数)中有错误发生,全局变量errno就被置为一个指明该错误类型的正值,函数本身则通常返回-1。

errno的值是只在函数发生错误时设置。如果函数不返回错误,errno的值就没有定义。errno的所有正数错误值都是常值,具有以“E”开头的全大写字母名字,并通常在头文件sys/errno.h定义。值0不表示任何错误。

在全局变量中存放errno值对于共享所有全局变量的多个线程并不适合。

基于TCP(面向连接)的socket编程,分为服务器端和客户端

服务器端的流程如下:

(1)创建套接字(socket)

(2)将套接字绑定到一个本地地址和端口上(bind)

(3)将套接字设为监听模式,准备接收客户端请求(listen)

(4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)

(5)用返回的套接字和客户端进行通信(send/recv 、write/read)

(6)返回,等待另一个客户请求。

(7)关闭套接字。

客户端的流程如下:

(1)创建套接字(socket)

(2)向服务器发出连接请求(connect)

(3)和服务器端进行通信(send/recv 、write/read)

(4)关闭套接字

总结

以上是编程之家为你收集整理的Unix网络编程思想全部内容,希望文章能够帮你解决Unix网络编程思想所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值