From c1ce100bcb0016a5bc39a83c110dbdaee5c1a078 Mon Sep 17 00:00:00 2001 From: Vinicius Silva Date: Mon, 27 Nov 2023 15:55:30 -0300 Subject: [PATCH] Funtion recv, recvfrom, send, sendto implemented to differents socket connections: UDP, TCP, UNIXDOMAIN --- bin/client | Bin 17464 -> 17408 bytes bin/server | Bin 17432 -> 17432 bytes src/client.c | 34 +++++++++++++++++++++------------ src/server.c | 52 ++++++++++++++++++++------------------------------- 4 files changed, 42 insertions(+), 44 deletions(-) diff --git a/bin/client b/bin/client index 5cb54e6bf6fe8d92d2a177a652967b3e3982e9b9..a7343ca0b5745f9aa18f9dd90eb18b147cb576d5 100755 GIT binary patch delta 4157 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 D-7r!4 delta 4110 zcmZu!4Nw&K72iE>y*s?)?m%3?4>%H|QTb9qse?etrdt)G&CsebIw}%OtrIPD9IF9C zKHMxs@Fj*?YtTuR$xJ#}k`Ae+o|<})Itg^FV{BCFn9dnZ{D8E?Vz$5k?*9zg$(#A_ z+xOn@ef&T6?)~d`id{R!=9FN6P%x>)V#1b|hY!aKelGc2E@XSecuNvHgW^+;F}YKE z`@+BPe7ErCt`Et*ApLN2+FfdlD_*o%aJIMYc83KuB)HuHPcYZ*aEyhojFEzoiZLD| z1B20n7!P4g!I*}TgOQ6d6C9({>{5PJm*iAcT$g3+wK?n+ILi48x0diVQm<^sN1cZC66wp_|G5R^jx7zRnurYjh zvI!GH784Fo&?S4$ajy>A;ZDk8`P#X^o8y)N!Th(d>4V}SGkTUvU9z}`mbua$jY+iC zl^yJ|r7oiPTse8Ccz~OUmSdU4gwMfQ!hJTc-%_4Cy>1aNcPmGi@hGuPW{b^8a#&Gz z+RC2H@jX0i44(x(%i3nk`V7Zkv+`yNyR7)a$K2snn?o_(cFP`trw>!mGdVQ~iLKS0 zB+GdPd>I|3;7mF5ZJuHVw=TDgLKD|NCwIQ=nI!suxo%_Ss;Aa%T(^1s+ErB>=@0Q8 z37glg{nfWRS~2=Bl;TY&6ook9HG~Q9P-E7w_pzgrfkK$>ot8bL1Yo9exi)RRM?lT_ zwAw2#3G=lnDYD#STVBug?vn57V{%uqrAKIi&(Kta>4;Y@>K%V;O%@T!7J_#j28RI8yKp) zV@&!YTM+!|j|jqmf8t%p`8GMrCQq`-6Kry_P4?MjX@oqACA^nKKMp=Ym5K7=ZzMr5 zl8LcD1SKYiQIa=?-IsLp8~&F70RUFNAA6M!!G3o&isB4t$S^&p%0j zOB^r0K+(jBQ(uEhsGU}!HWaO4ud4Q0jaSu+svty{ePbBWO2aTtOTWmX+@$hJ$9n`p zmyY21XLe$=kF-eiC{UU*+^~JvsP&_q%XBa)D{UPxRhrU&JQPBt%l8Ze(iL4=(nHsh zCWwc~HKt-=J=E}+}4ZgRE*wG%u`b z{i=3KSGv`;y=uefqN-J#r}i-i>-rb!(xnJ$v`l(!zpk8l4}O9cDK&Z{%31b)eX^=6 z{d&b&b?x7EXR~%1HB29E*3iZ5(YeEh(V(0ab>-|_rF&Z+?0(B0?f)N2);?`k^@?bv zI&F+uRgDylGX3tc6YGY}3=4E+*o+&&-xTI%#q9wI6{ev=_@7tJ`fhw%AIdtfoz#^Z z+Bqyo5tgGt85VWv#A!h&RED>`)jVQ(P*jZ-Jer5N$IZ$kbaw32wHsJ54MWy`6md`+ zCKbJNmzA&FveK7hd2XoYF1oPI(X*Cy2z3mp)0A6P{+ryooiV@pRNYcI^}t5y^ql@r#A|N=Xm1rI4=v)s()# zc0#(uq$X*vhe?s>E>xgN|9~-7KtE)H0Lbsez<^gv3e z{La@{(N+}F_W=uyrELfYRNb7-IoLF*<6A=tH@t5e4#RMreKM_XxMKDnQ%g!(`BH6r zqpH=`k396iGgn=*}#|2Z%XW6uq{Ih7Ip_IM8_K4ETR_A)5 zUeQW#q)w@8*UMYgwLO~iL^Y)YA6u8I zmv^9&E?wDY9iP$chtUbN>uK zB9ldl<^M&nrgi6^C|yzdWa-M%RZk*pXKPxuM7;@b?#?(?xAc}_^uwVV zdACP9_=8uVl7;LvfyP)&5V!t>=7y3dHY4{#O!tV({HJ*kud^_^zGSu0#!#mC47G&h z)asi^!hoDoz#B0J#aQS=o-kRN9=i zGSr2ShY|MKq;{vp@pEEQDc#O07Uxi2c6w$v3j<>90Hb#NGcdx;P0A2ybM`#3nvP_r zi+8CnJ4)RNkC8jKEj2Lmj~(C)3ver@i8APk$igR~=Gt{cneT2f*eOZHj3p8ML{ z{PDmCu+RaHx6nAY(6be>--f1ey}j3-XX&R3_S?vO7}#Ff+x#U|S|E#+?3r52F&&>; z>0<}%1rxK!e7;2ofc$_X!yL&^uh2t%1#;e1ZnfW8ZbAQj*9U_|?#!K? zoT}+J^JXW;KCT$Y$8}|1b};r0#`qix71xRV^snM{3Ks`FSX+zelj7OI0GDFC*Tj{S z1n%GAWBZ>-t4ng?2ibKSG??1Cx8$_L;darQvVwS(-GxDkPC8gtATFm*$|nCG(8ndr diff --git a/bin/server b/bin/server index a270f934e6fa60761336f25b8f538cde6a2d890e..2478c84eb2f331c841675c34c0040277dcf2cd21 100755 GIT binary patch delta 4101 zcmZu!4Nw%<9e;bUa^T%@cYw#C;qGw6Pw*h32S!=MjY}dereU;I0tB$wA&AIz{5p@! zC5D{^YVz8YnD{ldGtOA2>X`||B%Z~DV|^C`7?ODH0O{t>Ae0a7t$khqQ!}?#;r9!QTH!@wtLs` zY2s}*6*x-qW`%D>$f*Ka;vT?B{1%SjOI0K32jL-=Iys`DiJ4u8F~Ms% zf;!b*~cB*b@KgBmweksLKb#>jg+G>0-u`ju< zX;VXUTXk)HeQR}7Lo+_^dD{8>rsn$UtqrZeY-mL-wauIA&?HvF)~&cdX&)Xea^TLX z%khP&ueeM)viS&|e)aV!2*sgvs(UjwB_gClGw~LKjpt|?+%mNeZ7C7O_1ypCntrKR z#UV7(;T)q4M-2vJWD;t?RmN3znC(PcN398f#N+qD=RKpr*f@2K!9UFwA9aFpu+%Mlg-uw8*l&_il3LgGQ2L^d>W*CoB5Me>FSFHhS}# zrjN?Aj^|?0vfdA)PjV1ScC18*L<0Sz82$Yi{p}e2c#Qu07=3??{+mg90ZG_32_X8* zF}g2C_u@;InH4i&*X6XIfNgAJZnEPgm?1(!*Rt(^2wiL|5ryMzX@bNqCgYbwZHe+w zvZI~w`l$qdnZhqvfuFX{U|8H}&78*qguL@Bg}}1w3t%XSH`)w>wCqbzB6e8BNIk6d zpV+Gl@Cj@Atgir;*vrtrOHQKrsThu&0hY)|1HP#2O@?yna8^o=y$d)SMSke4%LS1R z{zsNUyDqWYabrp*vk||NQkhr-C^)<`72imCmf4DnQXhNHDf(^+qIXEFjD-0p*-VM8 zosUppT-P>T;v+)cpdfjNB>q+(*bw9oL}ht6TQy1LQEDv_FRboj6TnmB?F1ffPo1w9 z!u$XUjE|)Tv(J+#!!1%}uOO9QlKA%oWm2!hq$DwA49gAeJCijbG>| zXR#929ah2*FP#8W>IUOkQdp!O-%fM;{|b6wT=v=}ejLn4h;J8LNZFY%u@A^H16HD9 zy^8Y&;7R3Uf&`UFl@ZB1F8QJ*;(#Dt6vPiB$*}yeaZ=?SiI0kZhrs=S?449m;FekR zMFW0cG_I`@HaO0|1A3-S552A}XSgZMzCDNhxGA~s!H*fKej20|*&|>Gvj?Cjze&Su z!fZE;Nei-kp zm@E&1{OX=8kAc+Rmt`~T@)3}3kgK7J3XoxtEg5 zWm~-M-{1~mw3ZHoPI!I_<-ybu;!Wl~x>Dm57|wv_C_Hr|*p!vY?7=x%4km=lvmCl9 zqqsRMvzCM6n}9LlrK>X}z}7nf5+F+_*p;h?7L^ag#d#TpLozo3XBZ~xg7HKQ7?R8# zV7r5FXE|I=umq%z35M>V5`nM=fHj75W;%2~z8Cz_%&!xZw7URG!7Fldb)F2|nzNf( zh(~gYnI4>%>tH;1O|C;1Lc!MDRgB$2BE#vS(n+P;f-jmDW4-&3eedKyQ=mHG(ZQ`G zgwMHcI>_@6_mes<1!v`TlXR!@zGSxGH}W02E7S11`Pud$Yzw*Q#ooYo<8ykOzZ+&i ztWFNXLW@@gIz;grP6afaT(^JdUV0jEaxaa&o|7w|87_=w8i$5QAFF)pBNy3A-Ai^eKXBVWI$OQrZ*6F(i*B0CG=f##pj=r`W9w}au zUO_cYYQK02eJy9PXd9%-&+v9`VUj09jq1q=p5mU=>1q((!DZs~(nCxF?kiowEWsnC Gv;PMGLjkJ* delta 3931 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 diff --git a/src/client.c b/src/client.c index d65b96e..01842ef 100644 --- a/src/client.c +++ b/src/client.c @@ -25,6 +25,8 @@ float times[N]; int num_of_read_bytes = 0; typedef struct sockaddr_in socket_address; +socket_address server_address; + size_t buffer_size; int socket_type; @@ -32,9 +34,6 @@ int domain, type, protocol; float elapsed_time_ms = 0.00; -ssize_t (*send_generic_fn)(int __fd, const void *__buf, size_t __n, int __flags); -ssize_t (*recv_generic_fn)(int __fd, void *__buf, size_t __n, int __flags); - int domain, type, protocol, sin_family, address, sock; typedef struct sockaddr_in socket_address; @@ -88,8 +87,14 @@ void connect_to_server(int client_socket, socket_address server_address) int receive_buffer(int client_socket, int buffer_size) { int received_buffer[buffer_size]; - recv_generic_fn(client_socket, received_buffer, buffer_size, 0); + if(socket_type != UDP_SOCKET_FLAG) recv(client_socket, received_buffer, buffer_size, 0); + else + { + socklen_t* server_addr_size = (socklen_t*)sizeof(server_address); + recvfrom(client_socket, received_buffer, buffer_size, 0, (struct sockaddr *)&server_address, server_addr_size); + } + for(int i = 0; i < buffer_size; i++) { printf("%d", received_buffer[i]); @@ -102,7 +107,12 @@ void send_buffer(int client_socket, int buffer[], size_t buffer_size) for(int i = 0; i < num_of_read_bytes; i++) { printf("ENVIO %d\n", i); - send_generic_fn(client_socket, buffer, buffer_size, 0); + + socklen_t server_addr_size = (socklen_t)sizeof(server_address); + + if(socket_type != UDP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); + else sendto(client_socket, buffer, buffer_size, 0, (const struct sockaddr *)&server_address, server_addr_size); + receive_buffer(client_socket, buffer_size); } } @@ -134,26 +144,27 @@ void attribuite_socket_type(int socket_type) switch (socket_type) { case TCP_SOCKET_FLAG: // TCP SOCKET + sin_family = AF_INET; - send_generic_fn = &send; - recv_generic_fn = &recv; address = inet_addr(HOST_IP); sock = SOCK_STREAM; + break; case UDP_SOCKET_FLAG: // UDP SOCKET - send_generic_fn = &sendto; - recv_generic_fn = &recvfrom; + + sin_family = AF_INET; address = INADDR_ANY; sock = SOCK_DGRAM; + break; case UNIX_SOCKET_FLAG: // UNIXDOMAIN SOCKET + sin_family = AF_UNIX; - send_generic_fn = &send; - recv_generic_fn = &recv; address = inet_addr(HOST_IP); sock = SOCK_STREAM; + break; default: @@ -191,7 +202,6 @@ int main(int argc, char** argv) int client_socket = init_socket(); - socket_address server_address; server_address = config_server_address(); connect_to_server(client_socket, server_address); diff --git a/src/server.c b/src/server.c index 8df95d5..2a61755 100644 --- a/src/server.c +++ b/src/server.c @@ -11,9 +11,9 @@ #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 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 @@ -21,19 +21,13 @@ int num_of_read_bytes = 0; typedef struct sockaddr_in socket_address; + +socket_address client_address; +socklen_t client_addr_len; + size_t buffer_size; int socket_type; -ssize_t (*send_fn); -ssize_t recv_fn = NULL; - -ssize_t (*send_generic_fn); -ssize_t (*recv_generic_fn); - - - -//(int __fd, void *__buf, size_t __n, int __flags); - int domain, type, protocol, sin_family, address, sock; void panic(char* message) @@ -97,19 +91,24 @@ int accept_connection(int client_socket, int server_socket, socket_address clien void send_buffer(int client_socket, int buffer[], int buffer_size) { - - send_fn(client_socket, buffer, buffer_size, 0); + socklen_t client_addr_size = (socklen_t)sizeof(client_address); + + if(socket_type != UDP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); + else sendto(client_socket, buffer, buffer_size, 0, (const struct sockaddr *)&client_address, client_addr_size); } int receive_buffer(int client_socket, int buffer_size) { ssize_t bytes_read; + socklen_t* client_addr_size = (socklen_t*)sizeof(client_address); + int received_buffer[buffer_size]; for(int i = 0; i < num_of_read_bytes; i++) { - while((bytes_read = recv_fn(client_socket, received_buffer, buffer_size, 0)) > 0) + + while((bytes_read = socket_type == UDP_SOCKET_FLAG ? recv(client_socket, received_buffer, buffer_size, 0) : recvfrom(client_socket, received_buffer, buffer_size, 0, (struct sockaddr *)&client_address, client_addr_size)) > 0) { send_buffer(client_socket, received_buffer, buffer_size); } @@ -145,33 +144,22 @@ void attribuite_socket_type(int socket_type) case TCP_SOCKET_FLAG: // TCP SOCKET sin_family = AF_INET; - send_generic_fn = &send; - recv_generic_fn = &recv; address = inet_addr(HOST_IP); sock = SOCK_STREAM; break; case UDP_SOCKET_FLAG: // UDP SOCKET - ssize_t (*send_generic_fn)(int __fd, const void *__buf, size_t __n, int __flags, __CONST_SOCKADDR_ARG __addr, socklen_t __addr_len); - ssize_t (*recv_generic_fn)(int __fd, void *__restrict __buf, size_t __n, int __flags, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len); - - send_generic_fn = &sendto; - recv_generic_fn = &recvfrom; - - send_fn = &send_generic_fn; - recv_fn = &recv_generic_fn; - + address = INADDR_ANY; sock = SOCK_DGRAM; break; case UNIX_SOCKET_FLAG: // UNIXDOMAIN SOCKET + sin_family = AF_UNIX; - send_generic_fn(int __fd, const void *__buf, size_t __n, int __flags); - send_generic_fn = &send; - recv_generic_fn = &recv; address = inet_addr(HOST_IP); sock = SOCK_STREAM; + break; default: @@ -206,8 +194,8 @@ int main(int argc, char** argv) server_socket = create_socket(); - socket_address server_address, client_address; - socklen_t client_addr_len = sizeof(client_address); + socket_address server_address; + client_addr_len = sizeof(client_address); server_address = config_server_address();