Linux网络编程错误处理函数
封装目的:在server。c编程过程中突出逻辑,将出错处理与逻辑分开,可以直接跳转man手册。
为了对代码的健壮性封装,需要判断每个函数的调用结果,并将其代码封装起来。
创建wrap。h:存放网络通信相关常用自定义函数原型(声明)ifndefWRAPHdefineWRAPHvoidperrexit(constchars);intAccept(intfd,structsockaddrsa,socklentsalenptr);intBind(intfd,conststructsockaddrsa,socklentsalen);intConnect(intfd,conststructsockaddrsa,socklentsalen);intListen(intfd,intbacklog);intSocket(intfamily,inttype,intprotocol);ssizetRead(intfd,voidptr,sizetnbytes);ssizetWrite(intfd,constvoidptr,sizetnbytes);intClose(intfd);ssizetReadn(intfd,voidptr,sizetn);ssizetWriten(intfd,constvoidvptr,sizetn);ssizetmyread(intfd,charptr);ssizetReadline(intfd,voidptr,sizetmaxlen);endif
创建wrap。c:存放网络通信相关常用自定义函数
命名方式:系统调用函数首字母大写,方便查看man手册,如Listen()、Accept()
函数功能:调用系统调用函数,处理出错场景
在server。c和client。c中调用自定义函数
联合编译server。c和wrap。c生成server,client。c和wrap。c生成clientincludestdlib。hincludestdio。hincludeunistd。hincludeerrno。hincludesyssocket。hvoidperrexit(constchars){perror(s);exit(1);}intAccept(intfd,structsockaddrsa,socklentsalenptr){intn;again:if((naccept(fd,sa,salenptr))0){if((errnoECONNABORTED)(errnoEINTR))gotoagain;elseperrexit(accepterror);}returnn;}intBind(intfd,conststructsockaddrsa,socklentsalen){intn;if((nbind(fd,sa,salen))0)perrexit(binderror);returnn;}intConnect(intfd,conststructsockaddrsa,socklentsalen){intn;nconnect(fd,sa,salen);if(n0){perrexit(connecterror);}returnn;}intListen(intfd,intbacklog){intn;if((nlisten(fd,backlog))0)perrexit(listenerror);returnn;}intSocket(intfamily,inttype,intprotocol){intn;if((nsocket(family,type,protocol))0)perrexit(socketerror);returnn;}ssizetRead(intfd,voidptr,sizetnbytes){ssizetn;again:if((nread(fd,ptr,nbytes))1){if(errnoEINTR)gotoagain;elsereturn1;}returnn;}intClose(intfd){intn;if((nclose(fd))1)perrexit(closeerror);returnn;}ssizetReadn(intfd,voidvptr,sizetn){sizetnleft;ssizetnread;charptr;ptrvptr;nleftn;while(nleft0){if((nreadread(fd,ptr,nleft))0){if(errnoEINTR)nread0;elsereturn1;}elseif(nread0)break;nleftnread;ptrnread;}returnnnleft;}ssizetWriten(intfd,constvoidvptr,sizetn){sizetnleft;ssizetnwritten;constcharptr;ptrvptr;nleftn;while(nleft0){if((nwrittenwrite(fd,ptr,nleft))0){if(nwritten0errnoEINTR)nwritten0;elsereturn1;}nleftnwritten;ptrnwritten;}returnn;}staticssizetmyread(intfd,charptr){staticintreadcnt;staticcharreadptr;staticcharreadbuf〔100〕;if(readcnt0){again:if((readcntread(fd,readbuf,sizeof(readbuf)))0){if(errnoEINTR)gotoagain;return1;}elseif(readcnt0)return0;readptrreadbuf;}readcnt;ptrreadptr;return1;}ssizetReadline(intfd,voidvptr,sizetmaxlen){ssizetn,rc;charc,ptr;ptrvptr;for(n1;nmaxlen;n){if((rcmyread(fd,c))1){ptrc;if(c)break;}elseif(rc0){ptr0;returnn1;}elsereturn1;}ptr0;returnn;}
修改原来server。c,此时为了示范,仅删除原socket和listen函数的错误判断,并将函数名修改为Socket和Listen,其他函数不做修改。includestdio。hincludectype。hincludesyssocket。hincludeincludestdlib。hincludestring。hincludeunistd。hincludeerrno。hincludepthread。hincludewrap。hdefineSERVPORT9527intmain(intargc,charargv〔〕){intlfd0,cfd0;intret,i;charbuf〔BUFSIZ〕,clientIP〔1024〕;structsockaddrinservaddr,clitaddr;socklentclitaddrlen;servaddr。sinfamilyAFINET;servaddr。sinporthtons(SERVPORT);servaddr。sinaddr。saddrhtonl(INADDRANY);lfdSocket(AFINET,SOCKSTREAM,0);bind(lfd,(structsockaddr)servaddr,sizeof(servaddr));Listen(lfd,128);clitaddrlensizeof(clitaddr);cfdaccept(lfd,(structsockaddr)clitaddr,clitaddrlen);printf(clientip:sport:d,inetntop(AFINET,clitaddr。sinaddr。saddr,clientIP,sizeof(clientIP)),ntohs(clitaddr。sinport));while(1){retread(cfd,buf,sizeof(buf));write(STDOUTFILENO,buf,ret);for(i0;iret;i)buf〔i〕toupper(buf〔i〕);write(cfd,buf,ret);}close(lfd);close(cfd);return0;}
将server。c和wrap。c一起编译gccserver。cwrap。coserverclient。c无需重新编译
运行结果客户端rootguoliangvirtualmachine:homeguoliangLinux。clientHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLOHELLO服务端rootguoliangvirtualmachine:homeguoliangLinux。serverclientip:127。0。0。1port:54770hellohellohellohellohellohellohellohellohello
索尼发布新款OLED电视索尼将在2022年推出4款全新的OLED电视,分别为A80KA85KA90KA95K系列,这一消息也得到很多专业人士的认可,相比之前每年在OLED领域的两个系列,2022年索尼……
政策暖风频吹新能源汽车换电赛道升温〔新闻页台海网〕原标题:政策暖风频吹新能源汽车换电赛道升温新能源汽车换电赛道迎来政策利好。1月21日发布的《促进绿色消费实施方案》提出,大力推广新能源汽车,推动开展……
龙湖总部更名为赋能平台在宣布成立地产航道外,龙湖还对集团总部进行轻量化设置,更名为集团赋能平台,设立战略研究部、供应链管理部、公共事务部、品牌部、数字科技部、人力资源及行政部、财务部、法律事务部等职……
耍猴鼻祖最懂中国人和印度人占便宜的心理又来了,年轻人第一台车选择多的很,为啥选你的第一台车!恶心的广告词,又他么的来饥饿营销,一开个发布会就卖完了!绝对不能把生命压在这种没有企业良心的企业!小米比联想更可恶!缭乱整……
龙王回归小米MIX4详细测评MIX,一台个伴随着争议和热爱成长的系列,从MIX1开始他就伴随着极高的关注度,喜欢的人认为MIX外观设计极致,像一台艺术品,而不喜欢的人认为他太过超前,不够实用。但是必须承认……
实体店只要转变经营方式和赚钱方式,同样可以打败互联网电商现在的实体店老板都说生意不好做,骂马云骂互联网电商,其实不是互联网电商打败了实体店,而是时代在淘汰不愿意改变的人和落后的商业模式。实体店作为生产和消费的链接点,在数字化的今天,……
大家觉得华为手机能把苹果手机排挤出中国市场吗?想多了,我刚刚把华为换回苹果了,就不是一个档次的东西,爱国这种东西忽悠一次可以,老拿这种来作为高价的外衣就不合适了,以后坚决不用,除非价格减半差不多!不可能,现在华为手机……
iPhone13发售时间曝光高通和中兴完成5G毫米波测试01hriPhone13发售时间、渲染图曝光近日,追踪苹果的知名消息人士琼普罗瑟(JonProsser)透露,iPhone13系列将于9月14日发布,并将于9月24日在全……
曾泛滥的共享单车,为何如今只剩下三种颜色?在之前的一段时间内,毫无疑问ofo、摩拜、小蓝等共享单车都是非常耀眼的,大街小巷都遍布着黄、橙、蓝甚至更多不同的颜色,好不热闹。但这样的盛况却没有保持太久,小蓝因不可抗力……
微信8。0。11双版本更新朋友圈能换动态封面了,还支持多账号分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园!最近这几天,微信更新的频率有点高。先是iOS端更新到8。0。10,然后安卓端紧跟其后,接着安卓微信又……
AI这时代,星辰大海,百度世界大会2021拥抱未来8月18日,以AI这时代,星辰大海为主题的2021百度世界大会在百度App、央视新闻客户端等平台同步直播。本次大会由总台央视主持人撒贝宁担任主持,在3个小时的直播中生动展示百度……
吐槽中国联通不能忍的服务,这个真得改改了随着互联网技术高速发展,给人们生活带来诸多便利。但作为电信网络服务商,依旧存在不能忍的服务,像下面这个服务真得改改了。有市民反应,当自己联通手机卡长期没有使用,且导致欠费……
特斯拉赛博卡车出现在特斯拉财报电话会议前的最新消息更新的原型特斯拉延迟皮卡在特斯拉发布第三季度报告的前一天,已经拍摄到正在进行测试并安装了新功能的视频,为这个品牌带来了轰动。收益。在加利福尼亚州阿特沃特的城堡机场,一位电……
每次10分钟跟我学Python(第六十四次课)大家好!我是幻化意识流。今天继续跟我学Python。今天有个朋友在练习python中遇到一个问题,折腾半天没有解决,于是来找我,我看这个问题比较典型,应该纳入我们的pyt……
物流管理物流数据分析的方法数据分析是一项伤神费时的脑力活,老板几句话交代个任务,坐在电脑旁忙乎半天,一下午就过去了。更郁闷的是,你辛苦半天折腾出来的数据和结论,老板不满意,为啥?你做出来的东西,不是他所……
我在项目中用实际用到的22个Vue优化技巧代码绝不止能跑就行,但是废话只说一句:码字不易求个,。一、代码优化vfor中使用key使用vfor更新已渲染的元素列表时,默认用就地复用策略;列表数据修改的时候,他……
摄影如何体现做减法的艺术?摄影:HengkiKoentjoro器材:哈苏X1D50cXCD45mm构图是摄影的基础而摄影也是做减法的艺术最简单的技巧最简单的内容最简约的构图……
虽然两年没更新,但综合优惠高达13万,比买Q2L值现在国内SUV市场非常火热,豪华SUV市场的竞争更是激烈,不仅有奔驰、宝马、奥迪,还有凯迪拉克、沃尔沃、林肯,这些品牌的豪华SUV也是我们经常能看到的车型。其实,除了这些品牌外……
大数据学习SparkSQL入门简介在大数据学习当中,Spark框架所占的比重,还是非常高的。Hadoop和Spark基本上是大数据开发学习当中的重点内容,而Spark随着市场地位的不断提升,在学习阶段也得到更多……
大数据入门Storm基础讲解在大数据学习当中,主流的技术框架通常都是需要有相应程度的掌握的,包括Hadoop、Spark、Storm、Flink等。其中,Storm这个框架,其实处在一个稍微尴尬的地位,市……
(键盘鼠标)代码19由于其配置信息(注册表中的)不完整或已损(键盘)代码19:由于其配置信息(注册表中的)不完整或已损坏,Windows无法启动这个硬件设备电脑启动后键盘指示灯正常亮,就是键盘不能打字,更换键盘也无济于事,只能用鼠……
上海楼市接着疯知道上海房价在猛涨,但因为没参与,所以也不知道到底有多热乎。只听说积分制出来后,市区有的楼盘把售楼处都给砸了,因为不想让刚需知道。照理开门迎客,为啥看都不让刚需看了……
文字转语音(不是语音转文字)哪个软件哪个平台最好?文字转语音,微信使用就特别好。我下面的内容就是通过微信文字转语音去实现的。这个功能在微信聊天时选择加号,下面就有一个语音输入。微信这个功能特别方便。你可以把转换成文……
无线耳机性价比高的,有啥推荐?每个人对性价比高的定义都不相同,所以不会有一个标准答案,下面介绍几款性价比不错的无线耳机供选择。1、索尼MDRXB70BT颈挂式蓝牙耳机这款来自索尼大法的MDRXB……