From e07823c64ae9633777f662c3cb4ba43f5b70e6d0 Mon Sep 17 00:00:00 2001 From: Vinicius Date: Sun, 17 Dec 2023 20:32:04 -0300 Subject: [PATCH] Refactoring pingpong project: Separating code in more files --- CMakeLists.txt | 4 +- bin/client | Bin 17536 -> 21856 bytes bin/server | Bin 17496 -> 21888 bytes include/socket.h | 26 ++++++ include/utils.h | 21 +++++ src/client.c | 231 ---------------------------------------------- src/main_client.c | 125 +++++++++++++++++++++++++ src/main_server.c | 119 ++++++++++++++++++++++++ src/server.c | 224 -------------------------------------------- src/socket.c | 93 +++++++++++++++++++ src/utils.c | 23 +++++ 11 files changed, 409 insertions(+), 457 deletions(-) create mode 100644 include/socket.h create mode 100644 include/utils.h delete mode 100644 src/client.c create mode 100644 src/main_client.c create mode 100644 src/main_server.c delete mode 100644 src/server.c create mode 100644 src/socket.c create mode 100644 src/utils.c diff --git a/CMakeLists.txt b/CMakeLists.txt index d821127..63225d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,5 +5,5 @@ execute_process( COMMAND mkdir -p bin ) -add_executable(./bin/server ./src/server.c) -add_executable(./bin/client ./src/client.c) +add_executable(./bin/server ./include/socket.h ./include/utils.h ./src/socket.c ./src/utils.c ./src/main_server.c) +add_executable(./bin/client ./include/socket.h ./include/utils.h ./src/socket.c ./src/utils.c ./src/main_client.c) diff --git a/bin/client b/bin/client index 6454ae72ad49bd74bd89d61b3c75610f45331179..ac28a2c0db6665d998d540d0e1d534618ac872c0 100755 GIT binary patch literal 21856 zcmeHPad=eKmA^A_Br2Gpg%+)r35taxV*+TcEo)*Jcvyld5SMnv=OmdVBgxD-^F{+D z8X9$-9a5=ZYx#EVio159-F8c@U8z=0#0s|B4P9$#WxtIUJ|}`2L)4(i?C;!r&*aTx zrfd84kNx(WoA14I&+ndd@44sQd*7RzciwG*6-(VNm*7+;{z?$nKT9Dsx?p>~&Vba2 z%f%F&XNpgX)4`u6F;!lp2uf8t;LfMz8ZQGSy&04#K+jXKV9FK}CB0&)+^b5M3eA(A zhl+f3Lh{LTj=nxw@l5S{vb`!T@1TdY{Y>q8+V!GGn{0SKCQ2=~ZdH zDy_$KggS!6l>JFI(s8-A$4MP#3#VSY)^pM&)EE*|YJ<}1!&b|m(_VwtdrlkVqz|g< z1ygSCi_jy#eAuMjDOTzBid}~xeI1x;_liq8!cCVgx}>9Jen&Wx?3&+o`DODjTjWnf z{R^ZCWS0*Ijj3fT8wINACrrChxO)`O^--`@JdO@H^n*Vf-b-(}!#8*Pl`M;x(`Dc(g9?o1>?V z+#LSfbfQ#tQ*-3J1x+u#e*C(*&sY7@=dF57OqqQ5wEgS8_xm|huK3nj zgP~t_ZoculNZ~5~N!d!QGMS@roK6 zcu3z?M0`xke^kqF(zqY~B>6cs$&e})5w(!_qFrx;1~mBsGX@9bx@6!0~4!<4J^(@!^xkuZx4Y;p>KPRDlmX@)T zUf4-~UPucv(zVd1)B;NV?bq!_6f7PBCHbQlC}5J7pQ7ve`8Orlx&ShJ4GyMB?OvCgk&Y6DI94L?N&6B5W(i=P|OmcuCRql zQD5_Vv$=h}*%}OYh*&%vv06nq60*!-OG{i(qjdMZjErgxx0%UExT_^f2AGLZ{N_+x z%7qeWPFZbQQC%X;{JkAu||hF~gCt zWhUT~kR>9?PBYqS#zVmtvuT4Bl2u#rXh*Zz4%v=ST$rJjpcRyTGnJF|OIv;^Eu0cr){Fa0PTxe~Gg+v>9JKo0E#?+n+N1=rwAjnvl3Wva3 z+DWF_lt^exrJoCWnQE4S+|TRzc0CX0=;wRJZ_s$TUMCr6{s29|AfYkTK9PoOIIme$nz7*( z6XIgThJW0KkK1s17UXof#%cZ1ON}h5vEgMb3~JbLj}33I;nW9CYi&5S!RZDY&c2|s zb{h^y=TgjupP562=(6Ew+3+44KG}xfWy5iyb7`v$KRbsCvCW3_7@^|rHk_W_IqkIJ z_UDpaHvFS347%Hf)9(mQ{Wg3$gP{9tI6b>@8nodv7%b6}2TC3&d7$Khk_Sp2D0!gd zfszMG9w>RBDK!Ph(ZfP-J`;4gLX z^Bw$b2Y|!CtTKyF>Z^uQz z0PkCT4s?w^&qs)ScHEkdq5mR;Xy~7j9jchwLvnjGh5RrT_Fei4k+~<0)QB(=pm7}3wV}4OXHRynT8lNNzQ;(fyUR!!Uhp%(Zw0>%ybt^w@Y})f1dpoMUJia2_}$=Zz#HKE!S4g# z0Di5JZX7gH4L77452PB}D;{Y)*qUnSFw%ici!o1i$?{}=f5K+fy737&kSFbZAE&+t zhTP)G%1T_8hoIM*3cP|2x^xHM1e6LKLJLD^I|F;h(b8n;JhT);aennisymZP9y0m@ z86y=KCxvw2(4(||8Sh|$-06ulcs2M(x?O_S{(?Cn12N=`+0j$tyA3G^4o#)F=hGN?`5-3(rqU566AOw>$!kgU~Dr6hRUdc^(ZG_?+uJWTpX!O2gXp^H|-8$ zWqo~%-08+KqxmT#+`qY}r^gt`_*{bnU>GnoGEWb|&i zaGdT=M~2bR=2x=F8*^Wn$lvj6%R5`5y_s^uHDvUb!z7UYGW6OFr@7&*!L(<~(?ax) zyOJ}F^z<&|)1FqGjdXHQS_;RmI-boQ`5ZFLX*_-CYeHzr2?0a9C@ zI=(!$kChKY*+?D4bZ?}|nY-$X2~Rs`B~2S1+PIF?PTKPt9!SW-S+MX$PqL2Re6;(e$g$GwbAdHk;^ zXC-Xf4NPQyj7e#vJYSMVPX96p#yrlcXW)Q3iSEt34x!;C`4v^kiad}|72T*R@=BHI zQ$f<6R|j-O?;%6(evm49AMHNjCX2|d%&Txo%JVal&^N2pUR9+RO&Do)151CiOI{7n zf5@t)4-!cSdN3I8g8k1b^cM=HA-WCd9)&)w(Ct8X0)1SePbd_3r$)>M&m#)mteB|HFGz&58igJnyKy+Sg}X&6i{|+1H?x#*Ky~SmEQdhoI;(u7tQH1uP#fVEamB( zD43xOzAOtmP;i8vD!Q~itH>VPyikuNXnF|UAEG5W^&(9Ycs}j%Q}^~}Zj=uQo*9a} zOkH(1xV?cB0_n)-)y3O|n+FE9=WY~Xls|i{;>-J5jfz|86zPW%<;sZNE+}Q@!Uw&9 z6Rx!9hnS9^4V>8YQ(4Wkmc;_sfXr~5O%lF9G3|VERxHj0445`X0MQyw-*@@SreBp$zGn`1^H%Xc;B&Xb_M9C z#%xCeeeSxDdx899?f@ zvkj0FXM2~PJ>%+%vu-Kx5m%mj#itiuI18xMzYcUe`Yja+M51~v9NU1`kiJgT))pM! zMSFFG18_h{`bHQ8)`#Q!IG#hfe7BIxjovc%J4%M?7{u{I_|gQ;)#1KY3Q+k7 zjyF&)-#_I#-1WI~FKoIH*I<2~ev>Ts0jolJ6y=-p$`i@}U^8&6fy`dWNWXC#zPBt7s`9YLd z+RKqAAJDjY8D;X_P_Eyd%GEs$<6#8Tp$>#Q_kz6FVZ5 zG%S9MXF^K&&xK6%j7rJ=jyUnUTH(8fxQUp8A>C2>{XmJ|$>&&sIr`;y#@ltr+3tR+ zB?SFzmJ+xBNyX;+ho42Ve`rpsVxv>?b98;!KH_qziJx(je^@&nKeHsy{m|9_#R$h; zJ1ea6DWpcz22F3!G^S~frdu`LuIVmK`!yZZbV$C4JS^{zd+(`PE6uR^Pf{fxl|eTn+#6x?LzfO}v$LO3`?5 zp=67`U_LECzu61P(|B>?UmYW}w4f$Fjr%Uh#}{gx=PQ>kN5+NO=4((0*+;1nhf91c zH~%Dv6aC(#c6t6Yeit$>%p#u8jPF3Eko~)g;Jb_9#r*ILUmD$r^d&= z3Y_9LopH9uwY)PP_)N4*@wZNYP6cj{4`P!qkhoVk<7O`@B7b!e{JJ7|XA!(d;$Gp5 z%iW@JXFM&%#}$fS{g)#3|Fj7HOI?pMF83vkJL7UGE}GhP#!(LgFBIqe4)8*Lo{V*> z5Iz$))$fc$UMS_g!WsYkMc{?T+YMUY89yA6^`qq~b;b4VU35$Q)OhujuE!bodymGQ zap@0AoJZ3HeWVEf9B_(PcgC6T2Tp!)#&y3b{prnpM@H_=p_$*x`n|##hkRJq?;QVc zX?bV7{W}t$u$yy};HW~^>)ayvydwDLi{K5wecYIh-YDfy{a(OE;InLUoc$(n@|!a* z{Q+H%GY)*0#97-$S2xG4YJU_V)WN2(X$9L5pKB#7#Mk2!;T<+7s16* zv#lfA6znh&)*Vln!DJVrraNODAuH74uPQ7-(cxi)2gidO5DaX^H;7j3--pbWWM}6F zsMt6a>T4HO?+n4Bq!sQ+fXcva74!_wG?%Wbtq+)il}k)h$d<^6L{tY_3v6BAyWR2M4nS@e4g-MBotl7^XFAd(fb@+?F_Wf2`*Am`8l49 zC&fHKMdjx~A1>NmeLx^jQGOI45BXC<;`zG(c@?M+5#&MtCt~N-*A(*XqJc#pNXP>} zRE)j+efSXm{7**YRic9Y3r6>=g&|63NYo1X+agJSEFO)8;?@QmgpW7iGfm+Z4b@(?d_FCMQoKEw zXczvL4G}bQpd*>gdb}${hQOa%KzC}+Hb%k zC!W1ka(-`(_ZxJvl;u3p3vkeHeAX}aT``iS#J~R)r@kX)*LQwj>_QgQ6t}s&M8DhY z`uw|*sV`5OeuL$wzXpqctwq^>-bZ0Nro~U!)MPPtVsVVEyw#tOow!bNuPY?)PDdNiE#bG2ZoYQp5?dA zR8F0p*Z)4ic72~u$uX7xQ&*5Ydv%`a4)AvUSfvtR%5qu_&&Vn<-38XJ-=p=J)=;4> zu^v-;vC*#2-#21^f5%4Di;zls4(y)`N`&w-Pz zlV#zQ!V&=?mffPmB$*`BOlIQD9Zgsw zp%IrkV@}a?{9Lu^S-WMmdzNa=FVlt zcH923=WJfiz0ZAq&&T_`Uw3Za`&@Q<*R8hOY)q8`_6Kuj zv)QF=Jos@O6LOCrkcx85o=poSUI0pVGw31*oh4wVsEUv%+2tz@MM9z|a|)j99CRsp zD;+pT=qak?Mtv?JXBO&|@hfV!qrP!17Ivp(ui>piE%8p>NE0K03(oWGK3J66} z)t}TSbgYo^SZN6vp(tv#YmjzUS|QAsqErW!P4DToe@cBDq}>xP?uJ?ET>@r`s`@s< zj{4<~Eozu=lJ(^qhkiK@ipuU~SB8Ss%a>jms$CokhT|=ZTUIPzynLxU7I81(Ay8Z{ z95knHxUq`CO^Pttjm+LIc;$~|)1;jA#}#Z@-x{m>^y;a%UGnX=VDxC&o7|q_CL7YB zLjGikoS%a8OdRBo#;|>ci`9*DTyfwf%%E}my6&5pVrz>ba!#D$Dzw{4_aYn@e+Yh+p+qNmzOSludK3U`xC!uoLGKzmG|`%U4<1pi(jAc`U5XkF8aG;jotV0CM@M%Y)OH<= z;XF8vVXk@`^Wa^1@bWzPdNj-hnYCO1AXmM&{;~8f6#B)2uzv*Zgny?;0+QS+ z^`Dmd`y}20d5@1-A)tXHbDr*T1XK0-GYlzKtf+o060_TvIjeojk#g(dz~ z+&}IT9-*(!GbL_~{~6%qzf1aWmIl4RDV|@QF94cPR5Cb7e~zWzF6qbPAuUw@sGu(C zr;#QY3e9^en#5CbFy{%FeJcGprGL67Qn^Cv|C5YI=`WG`^DXhjrT$zwF5eYy*lSXM zmPNk;xQp(@9;qnFM^gXm7X1m3UzV-Px$$<XIqr0S zp>m(Zx5|0@w*qFYCKRb@WIkU_i{Dol4EsaD?E%*04*_O1k#IOrqqA5bT&qV|G*ELp zH1W$<2g58DtcMx%>yaRf>Cu|zRu&KASFw>B)I}prtU0d7sHRwe`(h1x zBphSSfoL=mWr3EU4!7`F)99;dX!O*@eC`@_K+76|#9V}V+q9&8Hu znqr8Y6h()Csc(veW$*aVCweqk9S`aOUku%hrs%EB=mT*bqF}=aemx9o5mX$0Sv@s4 zS`WwQbw;&N9o4aztOAkN1?y$YdDjGDG4xYVmvyk(2p<>TDLK1@>Sv-+z8H-+Mm7+< zJ)jzT!@4!A%6&`ROPRX5YV>l6n|}Z8c=E6_8xHz6PEx^*;({kF+n?}n)QX;Y3fPmV zS3S2)3kE0CU3ogz2Vqa&`@nd58k#Nn_(j2q6y-wjRMhjeTK`>g-OpbsBwT=^oTGH{`EAcbCJEhw*eOkwhg@<^^nPqms!NufVL!p>!H6It-3mKf5ye}BE!JyM|A4r{M|sZWE0A4ms< znf^LHj>?|aNBhcugP6q^RcRe7zeAT=;yrzmmRxx^nDoFGnM}GClkKph6TIyf*c$bd z{lFa%(nS^Quvnd1qHRP=dPlTGPx>j$s^@6|rfI&JwUU#+b%e2`Vv|l^aA70)b6kEH)y|Wev!F@+C)qDP#~P!iWyRr2 zw4H#>P!Dh_;p{|GyM7?t#jILx;nr^>PXu(Ti^3^eUQsP`9y0>VF0_eU2m}=1cX_;;3e&v z*Yv5{t`qdAqjlUfXN2xJg9BRPg;WyI z0ZqiwuT{qo!G$6M4D4=P@qsl*fN@MZ8o9(4pNR@60>pGe)%`VU%A91|X_^8id0AG3 z#XJ)4vBV2BAC966SoRb^B*pkCp$UBdr&v`qU_5@)lCVVHja8#14nI%7cXcTrFmOjyrzAm}$z=tsv1xOSwSbO6Q&1aklA&INSAkgP|VBMp#g6Xj+&Dsk7J_Lho2ImbLvI%^AXPEf6xiZJTB=;Z$wA$Jv&Ye z_z*>T=LRhBAxu|1bnwm|IfLGLNJ}_&!kd&irR+Fl3CB@9j7Y%@DLBLhRj?SO+t^R> zj6ehTI{MOF^{x|L2rtog9JTkE7xoAicCrc!0uq`F>*@aIaKIm!M=&f}((xfx%a>D6 z`f>^qL)hbe7Y^BAdD8nXf|jeD2iLjOo~(LTt9d~SrgpWrw_`QBY<=A$6B4g>pP9X& zH__ewR^fu~L?154cX;2mkqg{Yl8(EnqHA7=K6QY6rJe}?&6A|S zlJ_@ok>iaQsNvI(6G`rFCNOz_i;(?F$oja<+m80`(Grd$0)0uKdx28l9}?(`0__62 z59rSY`kX-b13durrvg17Q0m8Cpg$JqPe8;C_gci;<4yDKTB{|ecX9p7A!GJGfwh4- z?)V-AnDj?Z75zcco#sp&gI!pz}em8i75i+7q&EzlqseoVJT6O(@(8eZptq zXgQh5%mZZ=6X;=|&B3u0N9y;P%m(PO^PH>Co3Xa&+&c=}+4UD)yYQ+xmjUJWTS3!k z7dIpjh5YI``hk1MUKZL@x(CNeRiF1f=iT=5$>V`h9Q$y523a{MQ?l&{7A(noaa@YN z+5>9H?K`;w$o8g1ry_}DJemKj=UM{Ej z*Fk;{Hq2jYg4S6r*??BGq z>nVA`84*1B94lizFxCTOJuub-V?8j|17kff)&u{qdqCw8sJsDs{G{@vAZ(JPDsf@5 zDEUWUW+KGzFQBu`VFvBTMl}_B?x)fz56szeA{CdzBZJ%dkf_RN=j{BUIcesV~E1 zs(#8prK0q(Rm|Im>NtdrSI+N|{;-j$JApzbS58}BR7u9-}Y zpTb||_=U_me}Bgn&NuSzmHr1@eMx-BWp6ocpZ&@nbW((F^uDo5!r^}^Zng?H% z2lq+;)_m0}uJ2^lJlt>P@e|I2w*#m6t$Dk9fm6RRkI^;!;;}q_{xuJN7`Q9j1?OJp z`c7ue*FGU}YrgQOz;oqs_jCO0eDjIuH(D>&yxplBKRckgdGKq2Q@*)1PyBk|)NdY- z@TKysACU2<vf@XK=Oeg>~-d`PSg^CaQgh_5~rsrH9_NY{?WeExU~5}TWvLjgTd z>n@>G<+C*?>pO^yPv?n=8we=?&}FuPR&TTfchs zChun7=CW1myl_Z0=Scjflyr|uQl`x0v(nQIDN>k4TDpO7{jbOz7s>2d>XgWy1^jv0 zg%Ckt7Cd`yMTEWaW( zU%Vj8(q`^hYm@G;2Gyg2HmECnLlKBJGj}+m2i*1HxEmilpn-a;3BvaY_>3`FE1|Mg zYZlY(hO0ODV-3t*+Zsj{g6dHr!DkmSyz|Rqe2_&kbI3qmHHUQO=8M;jOLu()EM3F` zHO#FCTENo%2ig(-y@fl_An!O0_~yglgb#6-5*F$jRpC<(I1}dhPJ+2{&!ZQHIqs_e zYl!|H$D6q_W8cMC0#1&?_R+%wj38`d+YbNbCjZ_ z_&Lcc^mmQfUj1FAs4GjG{zl0z-vo}kb6!jp3 zhYH0={jBWOen1cyeo_s4wXdP5+Q)zjFXY2qZUaMm1gd_uFQ90%R95jTJw@+?oc0_P zul5}j^+CI6*EzE=7Ri-v7)+7=&#Hc~h-tRy6oSWM> z-J?5Y?bcTHN!|X>|2+Ts&$*{>pPc`0_pM&#bU2tS1?;aGVQq5^N||7Etq~P~GPaCO z#pi5xE}IB^0;d`LG6R5XlwM~hEEMztK+>B=bB{ha3A+mDIa((8mhO9*wXvQ5yl48U&lO%-43>NHG^Nn#Bw1Nz ziOQLP=ioXQmx8Mp*Bo5u;hKv}7HZ2{{tCzixGu!y5eyneipUaNrGmB;aG9uE!DRwD z9C*2D%1>t;e&Cf$ANzjoyW1Z*Un`$?BBJ{)T6yiN8(u11_+I&%9e2IF@!0zFXK$HY z@rUcRPoAE7>D{NEvUFc<$&C-bF)Q%lJ-1wYQ}hQfZ*I8jxit&7Z2yOrJ%uZ`AHOa9 z)m5K#zSjEjvJ<`6Z#?_Nbqij4^4*`c{OSkqc1;-C8eCHI)(6pBzq~y$;l7rMPu*wQh`Zy|M3vp;k6e_IZELk{|;9Q4^a z=zo)gerpc;qnMNmc=kep%jW+`4tiw{dQA>`Qw};UkJ;MQbI|EN$R@u8H~&#(zD@oMA^)nlSzCnsen7G_UC^%<^izc$#bzfg{Jeo~a+D^>QF&O%Zx-_Mdt)c) zZgvJ^f^JANb{{I#?k`1uCkZ=022`@he<0*Poo`s!A`G1ad5Vv2^RpUsvfn8BCFL80 zyjRG(g`KB`ynlf~_`RUd7xGb?eOkB3{x4{uL%H1mY>$vHv)LaO_Ps*>CL#ZVkl$#t ze<9*b{c5z)70}(Fy9HgCVKqX&O3-EerwaKtoBX@HUCdmsVL{HrJA|LV6$`v38n{)^ z<@27Hc5DsoQydb4aI=u#B>ZU>?MnMSqQ4;|U&yZ&?Mi=` zrqwq4wfbP#9}3mt;o77xU>24Y+;5Jx+PpPC*K9Hv!n zSfkYiVu6NWTo1%Htf>e^!hsF`nh^QJl|#e{!^dDCY&5BbfQJ)JTBKf!1^jhd%{Dy{ zXK^%G?{5l*wy|g|qDN{YA!<>NMMAY&qd#013dEQesPpT7-dC+AQC|-dby@lo^@oFq z=U7|ZZ3B%*YPSR^6lB2&tn9L08`Tm~X~pcXrZqH05CuL48U{d*1#1#PJ)jx3G<{pt z?58wexfTj_=u09VsACNj=2(Lq4NZhF7zv{*7^+$Xz_bV7YT|L>nlS`MgtNw%Ob5e3 zUB-bNU`9-|IL$81qd;(LK=Q9xUAdw{TkI)ivbJQby4Z6u?hPlN)SS$LYXUC$M|kF+ zL2*Fx+xVkr#R7IG+INflb4D;Ym7We;`TD@vV|Uy&k)9%dBJjkS!O7(9&wx{rzenV{ zvRSO#%f#;vNmm5DP~6{=F7e*AhCMU}>tm(QLYHd=ar-UwDP!Vn$U>iKp^sYV)@NE( z&?i9_ONUviEc61C%GgE=-DRO~w$P~$vNT%g)P^ik3th&7c+D0%0&SKy3;h(6%GfOy zy7&poxt$g|2GlIOE%eh&Dr0*r^dbxW5er?;5n}JP(5G4C_gUz2ttNJth5j9j{2>c{ zhK1f^p`UJ{=d1Y$k3c>G`3U4AkdHt<0{IB!Bk;c;fsc#M{akGy zEL2mj|GbDXbyt_}O!uhm&lNt)ok?Fj9pvHkyzc-M&1NLuNSxt;x6|o#C&y{yWq9DQ ziPHwq@IbeT(+14&z;8^PHiCu+9x!p*h#4NZ!^CL=W_VzSiPOf*@WAyZP8%-61AY^y zjh5koADTFAunZ5Bn>cN(3=fo;IBhr$4-}g?ZLkavOfzxXSQ#F0n0OJ#kAEfmOB*TZ zzlqZZ3i>Z`MC)Gsf3#@!O2*>_{Ev$=@z-tmOE&y@8~&6H|D6s0l?{K$hTm($|K5go z*zjF8yw!#$YK|7XT1B%+=T1ViLQGF(+?&(y=)SaB}E1KO#a?c6~`2}45;yDBse5EFb z)b0;2SGz|GRL24J@K^c_7AreCZc?A-ciVDev&6z`wSDo8dkxSj&;*aTg(ebOJe0Zgh?Lk~Bbl58DJCi+ur`cuBaC%{W5UrrwE zr}>ohoosJCnNAd;gMlg3(82yka66@ZCtrA0npm&y7~IXhc&ZV~b!uwDy!jmW^_O(j zAKVoM)qxoCirU`gRG*Fp!wu0$xIx{I|5)(dd^PD+lg))_Xu4=<^Oxzgn%YG+)l>%= zQB(Ie6G#@S$&FYe*0iaqO}D5?)eU?W@J`^nfh)l01K$Ju5#TVraT)Nv!1n_vi~g3atqEXM*sk^Bgxr0*zN=tJB6@Mjb)P2s^qOKo6hnpcyp z{mH~pwZqr1CViu%kn$aUg4Q3EkJ&j0S<*Ms-a3*_oB+5XBN7`GDI1KpDb@#lbcBE%t4R4q!0ni^ zi%@Q_qtuzI9#LzbQG;DO+S=OG?taD5(>*#VdAR$;>;;FC-Q8~&F6d77pgOVLH{yVa z%Y1_^za#Ao9~Bzllxr>iIov+#F1oX;=wG`qoapZikjRacYcXd!60_CR%yUssxkhla zsi{Q&*hoI3unogXZa!myplwXsL4%gaA za24pexZ6`RkDpKOe}qr9W9lFQz7*`DJI2)ud>_TS{|tH@*kmr+h;Jt~(>iD!Zme1D zt%C*n)%3ajCVV>dLVP;)^NuxfzxLC^RR7a(I_bK>G(JjG?z*RmX9(QO1+F#)-XMX? z3;}-MwQzxp$zAcikUVHO`VctB+~{WOM5CMELr*#pPaoaj<~m&Snf(S&ww}b|GK4Rz zf}5)#K7>h7sHS+RjzSu@ZPIlN2Q>uGEqI5(OS=AXj4?|v9_5T~Fpkj|;O8#GpNFv| zSne6IYM|*pjCmie9?3sobm)07XL zig9?!AhB|Ol4_i2Fl z?gM-b@Vrmb>DK`72OI@_9&iS}S}Q(Hr1Vz*T^|0e=Iy53mhipuK=! z0FDAuk!K+sH?CujX1C+4DU%92VVmfb(@+Q>@m-9A^^@rFjGwzM1?>FL@R^` zF?HgNa0sY^>zBA51fQSPlzg?l!1<{mLpFMF{RDC3=LV&W^J*?Y{2^Qiz~|>oP5v5_ z?}kq_4*a~P$*Q|2bq2bv2F;PbPulJ9FTD9{{ShJ5IS%wEh7el|wRfKK*D!23CP z+4@L)np4NY|2^tseLTQz6TcMvJ(z3!45_s3jG6om;C}%=Ka*IJfT;rg{z9X2hQQ^yd)iN@LeJt< zC^wUeJbzEmg;XT}ldsYd!uQhuR8d?8V2@ybo(i_`cqtSNL1y>i*^vtV6T%BU%TlqP zu_s)ZW!|-fjh*G+D>_QQGpJxkloxpxze^lOmvkm@>35fqpDdtkpK?&CNI7iv@&2JX zPQo@G$Gb!zvBxL*Tn|6_IKE2o@e_>WvL9UNTl|oD*mjd%#h{c4SS8?Q0iy!83D_y% z9s&0X*d<_(fPDfE3CNRm8S*`f@qwZU=oPR`K!f|uKV=@r6%`eiD)Xyr5@9`|l$3Z% zJ>Eqn367TBym+z4Te?7y|GaGn*b~_Cv|WnE-vQ2TVt^DOK)>g+${2d2KEL`((8*7Ge)U?==VY<- zcS62O^h@3^TZMglKL0LG&thnOZA>rmM36}9uL)|pzX1uhdR#}Mu&0)dge=Y*`RGX3&n6(wv}I(dn~D0F3P!5_|4H7u@zR0}cZ?kW3=&NidP6}5 z@oQ4vDVQ1ZA_v}hlR*ZDUWSlCpw}E^5X3+BGHCpD1>ZcGKJ#r28J7M`p1m=O8Pd!X z-`1r2YXJ3_0UKp47{-eeqRbPH=mAedIN`y|52AsXzRg0yO9$`{r(m5Rm9MB=L~9!t zZ}i6-nWt`B7)=;Zj~N`ix*<+48sK6A(ZGuZLVi*ZwP;9Z9=;}cQ1vuKfKnwMsAV2K z&()X(+aF_NVszn=_@F?v^&Rp0*pvAI%EKzw~= z6#89f)tA33B~&t`={H(tq4yx+UuqHQzuZ@ma3ci=#oSjhQ1jD|8tth_eYx)<;U2LM zLq3uz*?+nJ5d;m76sEr1$B|I(+dzaD;f_Sv^{COFh-_c(gGkscB&GjSPD1*BDebXH zT<)_-SSIxC{tGheK!su|_2s^ggk3^Vwr}tM-9mqbkdymJ63Tri(x;f&^&bF@Vj}G` z1qc;|e=@nhW?|S^w6-swt0jC~22400+m-&%nMkX?+%J$&?q5oI`~CC0&^O25Dx-A^+J&ARs}d={z(+-;k%vRx@V4V7&AdsZ6~XWA5ODEn`5 C;kGRR literal 17496 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 BN4o$3 diff --git a/include/socket.h b/include/socket.h new file mode 100644 index 0000000..19a208c --- /dev/null +++ b/include/socket.h @@ -0,0 +1,26 @@ +#ifndef __SOCKET_H__ + + #define SOCKET_ERROR_CODE -1 // Socket create, Connection server, Receive buffer to server code error + #define SYSTEM_EXIT_FAILED 1 // Operating System program error response + #define HOST_IP "127.0.0.1" // IPV4 loopback address + #define SERVER_PORT 8481 // Server port + #define UNIXDOAMIN_ADDRESS "pingpong.socket" + #define MAX_CONNECTIONS 1 // Num max client connected simultaneously + + #define NUM_OF_ARGUMENTS 3 + #define TCP_SOCKET_FLAG 1 + #define UDP_SOCKET_FLAG 2 + #define UNIX_SOCKET_FLAG 3 + + typedef struct sockaddr_in socket_address_ipv4; + typedef struct sockaddr_un socket_address_unix; + typedef struct sockaddr_in socket_address; + + extern int create_socket(int sin_family, int sock); + extern socket_address_unix config_unixdomain_server_address(); + extern socket_address_ipv4 config_tcp_upd_server_address(); + extern void connect_to_server(void* server_address, int client_socket); + extern void bind_server(void* server_address, int socket_type, int server_socket); + extern int accept_connection(int client_socket, void* client_address, int server_socket); + +#endif // __SOCKET_H__ \ No newline at end of file diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..442e285 --- /dev/null +++ b/include/utils.h @@ -0,0 +1,21 @@ +#ifndef __UTILS_H__ + + #include + #include + #include + #include + #include + #include + #include + #include + #include + + #define SYSTEM_EXIT_SUCCESS 0 // Operating System program success response + #define SYSTEM_EXIT_FAILURE 1 // Operating System program error response + #define TRUE 1 + #define FALSE 0 + + extern void panic(char* message); + extern int* get_init_buffer(int buffer_size); + +#endif // __UTILS_H__ \ No newline at end of file diff --git a/src/client.c b/src/client.c deleted file mode 100644 index c9eff84..0000000 --- a/src/client.c +++ /dev/null @@ -1,231 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define N 10000 -#define TRUE 1 -#define FALSE 0 -#define HOST_IP "127.0.0.1" // IPV4 loopback address -#define SERVER_PORT 8481 // Server port -#define PORT_USED_CODE 256 -#define SOCKET_ERROR_CODE -1 // Socket create, Connection server, Receive buffer to server code error -#define SYSTEM_EXIT_FAILED 1 // Operating System program error response -#define SYSTEM_EXIT_SUCCESS 0 // Operating System program success response -#define NUM_OF_ARGUMENTS 3 -#define TCP_SOCKET_FLAG 1 -#define UDP_SOCKET_FLAG 2 -#define UNIX_SOCKET_FLAG 3 - -float times[N]; - -int num_of_read_bytes = 0; - -typedef struct sockaddr_in socket_address_ipv4; -typedef struct sockaddr_un socket_address_unix; - -typedef union socketaddr_t -{ - socket_address_ipv4 socket_ipv4; - socket_address_unix socket_unix; - -} socketaddr_t; - - -socketaddr_t server_address; - -size_t buffer_size; -int socket_type; - -int domain, type, protocol; - -float elapsed_time_ms = 0.00; - -char* address; -int domain, type, protocol, sin_family, sock; - -typedef struct sockaddr_in socket_address; - -void panic(char* message) -{ - perror(message); - exit(SYSTEM_EXIT_FAILED); -} - -int init_socket() -{ - int client_socket = socket(sin_family, sock, -1); - - if(client_socket == SOCKET_ERROR_CODE) - { - panic("Socket create failed!\n"); - } - - return client_socket; -} - -socketaddr_t config_server_address() -{ - - if(socket_type == UNIX_SOCKET_FLAG) - { - server_address.socket_ipv4.sin_family = sin_family; - server_address.socket_ipv4.sin_port = htons(SERVER_PORT); - server_address.socket_ipv4.sin_addr.s_addr = inet_addr(address); - - - }else{ - - server_address.socket_unix.sun_family = AF_UNIX; - strcpy(server_address.socket_unix.sun_path, address); - unlink(address); - } -} - -void connect_to_server(int client_socket) - -{ - struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; - - int connection_response = connect(client_socket, - address, - socket_type == UNIX_SOCKET_FLAG ? (socklen_t)sizeof(server_address.socket_unix) : (socklen_t)sizeof(server_address.socket_ipv4) - ); - - if(connection_response == SOCKET_ERROR_CODE) - { - - close(client_socket); - panic("Server connection error\n"); - } -} - -int receive_buffer(int client_socket, int buffer_size) -{ - int received_buffer[buffer_size]; - - if(socket_type == TCP_SOCKET_FLAG) recv(client_socket, received_buffer, buffer_size, 0); - else - { - struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; - socklen_t* server_addr_size = socket_type == UNIX_SOCKET_FLAG ? (socklen_t*)sizeof(server_address.socket_unix) : (socklen_t*)sizeof(server_address.socket_ipv4); - recvfrom(client_socket, received_buffer, buffer_size, 0, address, server_addr_size); - } -} - -void send_buffer(int client_socket, int* buffer, size_t buffer_size) -{ - - struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; - socklen_t server_addr_size = socket_type == UNIX_SOCKET_FLAG ? (socklen_t)sizeof(server_address.socket_unix) : (socklen_t)sizeof(server_address.socket_ipv4); - - if(socket_type == TCP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); - else sendto(client_socket, buffer, buffer_size, 0, address, server_addr_size); - - receive_buffer(client_socket, buffer_size); -} - -void controlc_handler() -{ - printf("\nProgram finished!\n"); - exit(SYSTEM_EXIT_SUCCESS); -} - -void socket_listen(int client_socket, int* buffer, size_t buffer_size) -{ - - if(signal(SIGINT, controlc_handler) == SIG_ERR) - { - panic("Signal create error!"); - } - - clock_t start_time = clock(); - send_buffer(client_socket, buffer, buffer_size); - clock_t end_time = clock(); - - elapsed_time_ms = ((float)(end_time - start_time) / (CLOCKS_PER_SEC/1000)); -} - - -void attribuite_socket_type(int socket_type) -{ - switch (socket_type) - { - case TCP_SOCKET_FLAG: // TCP SOCKET - - sin_family = AF_INET; - address = HOST_IP; - sock = SOCK_STREAM; - - break; - - case UDP_SOCKET_FLAG: // UDP SOCKET - - sin_family = AF_INET; - address = HOST_IP; - sock = SOCK_DGRAM; - - break; - - case UNIX_SOCKET_FLAG: // UNIXDOMAIN SOCKET - - sin_family = AF_UNIX; - address = "pingpong.socket";; - sock = SOCK_DGRAM; - - break; - - default: - panic("Value error!"); - break; - } -} - -void get_args(int argc, char** argv) -{ - if(argc > NUM_OF_ARGUMENTS) - { - buffer_size = (int)atoi(argv[1]); - num_of_read_bytes = (int)atoi(argv[2]); - socket_type = (int)atoi(argv[3]); - }else - { - panic("Argument is missing!"); - } - -} - -int main(int argc, char** argv) -{ - - get_args(argc, argv); - attribuite_socket_type(socket_type); - - int* buffer = (int*)malloc(buffer_size*sizeof(int)); - - - for(int i = 0; i < buffer_size; i++) - { - buffer[i] = (int)(i % 255); - } - - int client_socket = init_socket(); - - server_address = config_server_address(); - - connect_to_server(client_socket); - - for(int i = 0; i < num_of_read_bytes; i++) - { - socket_listen(client_socket, buffer, buffer_size); - - printf("%lf\n", (float)(elapsed_time_ms)); - } - - return SYSTEM_EXIT_SUCCESS; -} diff --git a/src/main_client.c b/src/main_client.c new file mode 100644 index 0000000..c496830 --- /dev/null +++ b/src/main_client.c @@ -0,0 +1,125 @@ +#include "../include/socket.h" +#include "../include/utils.h" + +#define N 10000 + +float times[N]; + +int num_of_read_bytes = 0; + +int client_socket; +int* buffer; +size_t buffer_size; +int socket_type; + +socket_address_ipv4 ipv4_server_address; +socket_address_unix unix_server_address; + +float elapsed_time_ms = 0.00; + +int receive_buffer(void *server_address) +{ + int received_buffer[buffer_size]; + + if(socket_type == TCP_SOCKET_FLAG) recv(client_socket, received_buffer, buffer_size, 0); + else + { + struct sockaddr* address = (struct sockaddr*)&server_address; + socklen_t* server_addr_size = (socklen_t*)sizeof(server_address); + recvfrom(client_socket, received_buffer, buffer_size, 0, address, server_addr_size); + } +} + +void send_buffer(void *server_address) +{ + + struct sockaddr* address = (struct sockaddr*)&server_address; + socklen_t server_addr_size = (socklen_t)sizeof(server_address); + + if(socket_type == TCP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); + else sendto(client_socket, buffer, buffer_size, 0, address, server_addr_size); + + receive_buffer(socket_type == UNIX_SOCKET_FLAG ? (void*)&unix_server_address : (void*)&ipv4_server_address); +} + +void controlc_handler() +{ + printf("\nProgram finished!\n"); + exit(SYSTEM_EXIT_SUCCESS); +} + +void socket_listen() +{ + + if(signal(SIGINT, controlc_handler) == SIG_ERR) + { + panic("Signal create error!"); + } + + clock_t start_time = clock(); + send_buffer(socket_type == UNIX_SOCKET_FLAG ? (void*)&unix_server_address : (void*)&ipv4_server_address); + clock_t end_time = clock(); + + elapsed_time_ms = ((float)(end_time - start_time) / (CLOCKS_PER_SEC/1000)); +} + +void attribuite_and_init_socket(int socket_type) +{ + switch (socket_type) + { + case TCP_SOCKET_FLAG: // TCP SOCKET + client_socket = create_socket(AF_INET, SOCK_STREAM); + ipv4_server_address = config_tcp_upd_server_address(); + connect_to_server((void*)&ipv4_server_address,client_socket); + break; + + case UDP_SOCKET_FLAG: // UDP SOCKET + client_socket = create_socket(AF_INET, SOCK_STREAM); + ipv4_server_address = config_tcp_upd_server_address(); + connect_to_server((void*)&ipv4_server_address,client_socket); + + break; + + case UNIX_SOCKET_FLAG: // UNIXDOMAIN SOCKET + client_socket = create_socket(AF_UNIX, SOCK_DGRAM); + unix_server_address = config_unixdomain_server_address(); + connect_to_server((void*)&unix_server_address,client_socket); + + break; + + default: + panic("Value error!"); + break; + } +} + +void get_args(int argc, char** argv) +{ + if(argc > NUM_OF_ARGUMENTS) + { + buffer_size = (int)atoi(argv[1]); + num_of_read_bytes = (int)atoi(argv[2]); + socket_type = (int)atoi(argv[3]); + }else + { + panic("Argument is missing!"); + } +} + +int main(int argc, char** argv) +{ + + get_args(argc, argv); + attribuite_and_init_socket(socket_type); + + buffer = get_init_buffer(buffer_size); + + for(int i = 0; i < num_of_read_bytes; i++) + { + socket_listen(); + + printf("%lf\n", (float)(elapsed_time_ms)); + } + + return SYSTEM_EXIT_SUCCESS; +} diff --git a/src/main_server.c b/src/main_server.c new file mode 100644 index 0000000..c0bebee --- /dev/null +++ b/src/main_server.c @@ -0,0 +1,119 @@ +#include "../include/socket.h" +#include "../include/utils.h" + + +int num_of_read_bytes = 0; + +socklen_t client_addr_len; + +int server_socket, client_socket; + + +socket_address client_address, server_address; + +size_t buffer_size; +int socket_type; + +char* address; +int domain, type, protocol, sin_family, sock; + +void send_buffer(int* buffer) +{ + socklen_t client_addr_len = socket_type == sizeof(client_address); + struct sockaddr *address = (struct sockaddr*)&client_address; + + if(socket_type == TCP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); + else sendto(client_socket, buffer, buffer_size, 0, address, client_addr_len); +} + +int receive_buffer() +{ + ssize_t bytes_read; + + socklen_t* client_addr_len = (socklen_t *)sizeof(client_address); + struct sockaddr *address = (struct sockaddr*)&client_address; + int received_buffer[buffer_size]; + + while((bytes_read = socket_type == UNIX_SOCKET_FLAG ? recv(client_socket, received_buffer, buffer_size, 0) : recvfrom(client_socket, received_buffer, buffer_size, 0, address, client_addr_len)) > 0) + { + send_buffer(received_buffer); + } +} + +void controlc_handler() +{ + exit(SYSTEM_EXIT_SUCCESS); +} + +void server_listen() +{ + + if (listen(server_socket, MAX_CONNECTIONS) == SOCKET_ERROR_CODE) + { + + close(server_socket); + panic("Listening mode error"); + } + + client_socket = accept_connection(client_socket, (void*)&client_address, server_socket); + receive_buffer(); +} + +void attribuite_socket_type(int socket_type) +{ + switch (socket_type) + { + case TCP_SOCKET_FLAG: // TCP SOCKET + + server_socket = create_socket(AF_INET, SOCK_STREAM); + config_tcp_upd_server_address(); + break; + + case UDP_SOCKET_FLAG: // UDP SOCKET + + server_socket = create_socket(AF_INET, SOCK_DGRAM); + config_tcp_upd_server_address(); + break; + + case UNIX_SOCKET_FLAG: // UNIXDOMAIN SOCKET + server_socket = create_socket(AF_UNIX, SOCK_DGRAM); + config_unixdomain_server_address(); + break; + + default: + panic("Value error!"); + break; + } +} + +void get_args(int argc, char** argv) +{ + if(argc > NUM_OF_ARGUMENTS) + { + buffer_size = (int)atoi(argv[1]); + num_of_read_bytes = (int)atoi(argv[2]); + socket_type = (int)atoi(argv[3]); + }else + { + panic("Argument is missing!"); + } + +} + +int main(int argc, char** argv) +{ + + get_args(argc, argv); + attribuite_socket_type(socket_type); + + int* buffer = (int*)malloc(buffer_size*sizeof(int)); + + bind_server((void*)&server_address, socket_type, server_socket); + + for(int i = 0; i < num_of_read_bytes; i++) + { + server_listen(); + } + + return SYSTEM_EXIT_SUCCESS; +} diff --git a/src/server.c b/src/server.c deleted file mode 100644 index 63c27b6..0000000 --- a/src/server.c +++ /dev/null @@ -1,224 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -#define FALSE 0 -#define TRUE 1 -#define HOST_IP "127.0.0.1" // IPV4 loopback address -#define SERVER_PORT 8481 // Server port -#define MAX_CONNECTIONS 1 // Num max client connected simultaneously -#define SOCKET_ERROR_CODE -1 // Socket create, Connection server, Receive buffer to server code error -#define SYSTEM_EXIT_FAILED 1 // Operating System program error response -#define SYSTEM_EXIT_SUCCESS 0 // Operating System program success response -#define NUM_OF_ARGUMENTS 3 -#define TCP_SOCKET_FLAG 1 -#define UDP_SOCKET_FLAG 2 -#define UNIX_SOCKET_FLAG 3 -int num_of_read_bytes = 0; - -typedef struct sockaddr_in socket_address_ipv4; -typedef struct sockaddr_un socket_address_unix; - - -socklen_t client_addr_len; - -typedef union socketaddr_t -{ - socket_address_ipv4 socket_ipv4; - socket_address_unix socket_unix; - -} socketaddr_t; - -socketaddr_t client_address; -socketaddr_t server_address; - -size_t buffer_size; -int socket_type; - -char* address; -int domain, type, protocol, sin_family, sock; - -void panic(char* message) -{ - perror(message); - exit(SYSTEM_EXIT_FAILED); -} - -int create_socket() -{ - int server_socket; - - server_socket = socket(sin_family, sock, -1); - - if(server_socket == SOCKET_ERROR_CODE) - { - panic("Socket create failed!"); - } - - return server_socket; -} - -void config_server_address() -{ - - if(socket_type == UNIX_SOCKET_FLAG) - { - server_address.socket_ipv4.sin_family = sin_family; - server_address.socket_ipv4.sin_port = htons(SERVER_PORT); - server_address.socket_ipv4.sin_addr.s_addr = inet_addr(address); - - - }else{ - - server_address.socket_unix.sun_family = AF_UNIX; - strcpy(server_address.socket_unix.sun_path, address); - unlink((const char*)address); - } -} - -void bind_server(int server_socket) -{ - - struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; - - int server_bind_response = bind(server_socket, address, socket_type == UNIX_SOCKET_FLAG ? sizeof(server_address.socket_unix) : sizeof(server_address.socket_ipv4)); - - if (socket_type == UNIX_SOCKET_FLAG) unlink((const char*)address); - - if(server_bind_response == SOCKET_ERROR_CODE) - { - close(server_socket); - panic("Bind server error"); - } -} - -int accept_connection(int client_socket, int server_socket) -{ - socklen_t client_addr_len = socket_type == UNIX_SOCKET_FLAG ? sizeof(client_address.socket_ipv4) : sizeof(client_address.socket_unix); - struct sockaddr *address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&client_address.socket_unix : (struct sockaddr*)&client_address.socket_ipv4; - - client_socket = accept(server_socket, address, &client_addr_len); - - if(client_socket == SYSTEM_EXIT_FAILED) - { - panic("Accept connection error!"); - }else{ - return client_socket; - } -} - -void send_buffer(int client_socket, int* buffer, int buffer_size) -{ - socklen_t client_addr_len = socket_type == UNIX_SOCKET_FLAG ? sizeof(client_address.socket_ipv4) : sizeof(client_address.socket_unix); - struct sockaddr *address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&client_address.socket_unix : (struct sockaddr*)&client_address.socket_ipv4; - - if(socket_type == TCP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); - else sendto(client_socket, buffer, buffer_size, 0, address, client_addr_len); -} - -int receive_buffer(int client_socket, int buffer_size) -{ - ssize_t bytes_read; - - socklen_t* client_addr_len = socket_type == UNIX_SOCKET_FLAG ? (socklen_t *)sizeof(client_address.socket_ipv4) : (socklen_t *)sizeof(client_address.socket_unix); - struct sockaddr *address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&client_address.socket_unix : (struct sockaddr*)&client_address.socket_ipv4; - int received_buffer[buffer_size]; - - while((bytes_read = socket_type == UNIX_SOCKET_FLAG ? recv(client_socket, received_buffer, buffer_size, 0) : recvfrom(client_socket, received_buffer, buffer_size, 0, address, client_addr_len)) > 0) - { - send_buffer(client_socket, received_buffer, buffer_size); - } -} - -void controlc_handler() -{ - exit(SYSTEM_EXIT_SUCCESS); -} - -void server_listen(int client_socket, int server_socket, int buffer_size) -{ - - if (listen(server_socket, MAX_CONNECTIONS) == SOCKET_ERROR_CODE) - { - - close(server_socket); - panic("Listening mode error"); - } - - client_socket = accept_connection(client_socket, server_socket); - receive_buffer(client_socket, buffer_size); -} - -void attribuite_socket_type(int socket_type) -{ - switch (socket_type) - { - case TCP_SOCKET_FLAG: // TCP SOCKET - sin_family = AF_INET; - - address = HOST_IP; - sock = SOCK_STREAM; - break; - - case UDP_SOCKET_FLAG: // UDP SOCKET - - address = HOST_IP; - sock = SOCK_DGRAM; - break; - - case UNIX_SOCKET_FLAG: // UNIXDOMAIN SOCKET - - sin_family = AF_UNIX; - address = "pingpong.socket"; - sock = SOCK_DGRAM; - - break; - - default: - panic("Value error!"); - break; - } -} - -void get_args(int argc, char** argv) -{ - if(argc > NUM_OF_ARGUMENTS) - { - buffer_size = (int)atoi(argv[1]); - num_of_read_bytes = (int)atoi(argv[2]); - socket_type = (int)atoi(argv[3]); - }else - { - panic("Argument is missing!"); - } - -} - -int main(int argc, char** argv) -{ - - get_args(argc, argv); - attribuite_socket_type(socket_type); - - int* buffer = (int*)malloc(buffer_size*sizeof(int)); - - int server_socket, client_socket; - - server_socket = create_socket(); - - config_server_address(); - - bind_server(server_socket); - - for(int i = 0; i < num_of_read_bytes; i++) - { - server_listen(client_socket, server_socket, buffer_size); - } - - return SYSTEM_EXIT_SUCCESS; -} diff --git a/src/socket.c b/src/socket.c new file mode 100644 index 0000000..5c9c3f9 --- /dev/null +++ b/src/socket.c @@ -0,0 +1,93 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../include/socket.h" +#include "../include/utils.h" + +int create_socket(int sin_family, int sock) +{ + int server_socket; + + server_socket = socket(sin_family, sock, -1); + + if(server_socket == SOCKET_ERROR_CODE) + { + panic("Socket create failed!"); + } + + return server_socket; +} + +socket_address_unix config_unixdomain_server_address() +{ + socket_address_unix server_address; + server_address.sun_family = AF_UNIX; + strcpy(server_address.sun_path, UNIXDOAMIN_ADDRESS); + unlink(UNIXDOAMIN_ADDRESS); + return server_address; +} + +socket_address_ipv4 config_tcp_upd_server_address() +{ + socket_address_ipv4 server_address; + + server_address.sin_family = AF_INET; + server_address.sin_port = htons(SERVER_PORT); + server_address.sin_addr.s_addr = inet_addr(HOST_IP); + return server_address; +} + +void connect_to_server(void *server_address, int client_socket) +{ + struct sockaddr* address = (struct sockaddr*)&server_address; + + int connection_response = connect(client_socket, + address, + (socklen_t)sizeof(server_address) + ); + + if(connection_response == SOCKET_ERROR_CODE) + { + + close(client_socket); + panic("Server connection error\n"); + } + +} + +void bind_server(void *server_address, int socket_type, int server_socket) +{ + + struct sockaddr* address = (struct sockaddr*)&server_address; + + int server_bind_response = bind(server_socket, address, sizeof(server_address)); + + if (socket_type == UNIX_SOCKET_FLAG) unlink((const char*)address); + + if(server_bind_response == SOCKET_ERROR_CODE) + { + close(server_socket); + panic("Bind server error"); + } +} + +int accept_connection(int client_socket, void *client_address, int server_socket) +{ + socklen_t client_addr_len = sizeof(client_address); + struct sockaddr *address = (struct sockaddr*)&client_address; + + client_socket = accept(server_socket, address, &client_addr_len); + + if(client_socket == SYSTEM_EXIT_FAILED) + { + panic("Accept connection error!"); + }else{ + return client_socket; + } +} diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..75e229e --- /dev/null +++ b/src/utils.c @@ -0,0 +1,23 @@ +#include +#include + +#include "../include/utils.h" + +void panic(char* message) +{ + printf("%s\n",message); + exit(SYSTEM_EXIT_FAILURE); +} + +int* get_init_buffer(int buffer_size) +{ + + int *buffer = (int*)malloc(buffer_size*sizeof(int*)); + + for(int i = 0; i < buffer_size; i++) + { + buffer[i] = (int)(i % 255); + } + + return buffer; +} \ No newline at end of file