From 018e1911c459840f2341a96c915e070b04f84548 Mon Sep 17 00:00:00 2001 From: User Infidel Date: Wed, 5 Oct 2022 21:04:30 +0700 Subject: [PATCH] SCTP socket added --- README.md | 7 +++ bin/sctp_sock | Bin 0 -> 15608 bytes bin/tcp_sock | Bin 16288 -> 16368 bytes src/ksctp_socket.c | 102 +++++++++++++++++++++++++++++++++++++++++++ src/ktcp_socket_02.c | 7 ++- 5 files changed, 112 insertions(+), 4 deletions(-) create mode 100755 bin/sctp_sock create mode 100644 src/ksctp_socket.c diff --git a/README.md b/README.md index b63a16a..4994e37 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,13 @@ The `kqueue_socket.c` is my attempt on create a socket watcher timer program usi - Array of kevent +### SCTP + +- Listening +- Init ACK + +> Find out how to make a stateless connection over SCTP. + ## Goal - Understand the difference between c++ and C diff --git a/bin/sctp_sock b/bin/sctp_sock new file mode 100755 index 0000000000000000000000000000000000000000..d1eb34e6455b575f1281a748696e211c3f71571f GIT binary patch literal 15608 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 literal 0 HcmV?d00001 diff --git a/bin/tcp_sock b/bin/tcp_sock index cd692d80b6f783158628ea8a5aac70a204d3487d..fa42a75de1d2f1cb3c11cba19d6d7b86e25bcbe9 100755 GIT binary patch delta 2195 zcmb7FeQZ-z6o2zNePwkrkrv3t_u7??Z5{2}VBMP`VT6y=pi&au7J)z}L_VAy zj3v~H3{Olj#)L%^oc^J4A#}_zV6dSw#O6%@lf zqt#~6v7@jG*|^b~H0oGWQGz4lOgi47<0T#cxQ;jLc#n>^>iBs&-gcjF;*(DoDAXlX z>v+44kLY-Zj#qSizOFpl2+ta4C0p^Cl#X+zL0yI*Xq5}B9ziQzgrnUZL62|?Y19!7 zt#meFs@coKl^#H^p<~Dt>(pL1HKYra&eJ>G8ERSdwtJP--?{fO zQGFAau)Fu;h?Pzmq84yT=UE(nkxGoz_x;%P<5K-x@|BKJvGs?iQokwb9ha2!+6&sH zYv*$Ie>E*b;pi#UzHDv~aXN1H^K=Zrb+d=f2D_!C(Z?4V)c8UwW?#KX=a*^0CQw2& zZl9LnJHb6l14L*eOgF_-+R3Uc3EceG;L(ErajbW@?b5R*D7hl33Qdz z)##e&7Yc4+b$=smWbZY_2|rmp?lufZwW4#VY$at)w)JX`&Sib{xgo zY>1>6QJRkBQp34@=&47zCRZE#%ieh&lLmf;RfP*gL58-%{f^7Tc<_ai>mEh%Fv#|q z>?82mXD0^~qCZ4hNykPM{F6OM@Z#mZA@*RW?*>j7cI? z|4H)83T~|}zW`^3b2AC1&MF6wlLmL+Cj@Y3D0E?@BR07Pv_CsUX3u-qGSjwn~ zrR*5hwl7(WwO>t*bjKcGukl%ac;xoNZ>3$r#y!pfgX9T!G&Bu{3x$y0jO|pWf|yp4o|_G z0pBqfv`;(06p)GrG5U2;9SecYwGQvYi>^}E())(%y#f~KEt|2}i19UZdRVCU-kjSe z1h*EgL~(TSu@brqdW#@nf-GRSiRCY_ZLqPtnC*mJ<@FVjNzxuJwF?0!B|Wqg=!$|x zxCyt)>z|qY2RFFTf#0jd!xZ!k)RMxZ{PYJr?DLjSpPaT5!%T1rarn~feI&YvCl?AC zkbT8iy!pOY@gvvmtH&Cs+}~JHJe@9>-ZtQ=$YPO@fWsAD)(&SX>M=|5yIDWX_s>Ot zmA@W8lkfVQjch-#pjQgubs-BtO|VK<@<_>lJhs4I)I9juLSL{-%3?EWuAB} z?7Lv?QZrqAGCYOdwM(UV9>$@swo1xOyC2NJ7@|17cgXO=zN|{3mkk-dZI;#HM*DCa zhcO&qgPKsC7=03Uhr;3tH=GQGSpvq8bCg0b9A@vpu5cY**ghO_>2RGGSpvbjuvEE} LFDX>QnXvmm7tUPO delta 2068 zcmZWqeQZ-z6o0qS?!9(f`?`&`h^#=%huF0%j19`xHdyy+jDUbTJ_Lzu6Gt%1P?6|> zv1DB}43B>pi3zC5#Fz+HbP>ZA28nmgt*@1X^qVO17*WLrV-a?J2)!C#hFK-A4RVaj4Vh!C&cxgxPd&)Q%+aak%(J)P&WIdz(4S;XQRu&i&+xe9s@5K_zMQ!N<3UP7kF|FjzNPX4{qbS^9`zM zQ0)-Fbvq2|m_c>ICW{N6&6(D`6&I$ooE3WwPC?MiuG+kU?*9p&_Tm`!2-lNG8`3fS zR|r!YwE>PV5;hU;;rI+;N~Ct2<1YzMC47YAPYIiaW+XZ|@evWU@!DRF-y=-f)L!8D z9m14FZ41Y55~l2Ft2k~aY$Y7yct2qq;Sk5K5T;yeUXB|H=Pe|{!HMleP&ze%cxu$OE(FD6>`*TiJnqO|txD(<4X#9mWSN&T(9ivzXS zaSD6!0eoVnQ|3`C6iMfp2tP{GbEvpaVP%g?)$^#Yw2YY=zkMimO-b(>P}1uz=mXc! zs`lHu-bHf!GX z=;ABEHA>w?=tH#~y|uL^*)@{?H23ej;fCF|S$vp2G}*Ja@;T9qxu{#Gq|J5MRZ_$8 zwehdUa0zQp36zI@*T-b|!R9Rvpd8l=&!TfSIhPJL4y&{;8{!+!n=LRcH_QY`=FVU- zsLicsPr^63pRgU!ocHkD{f?NR{&Gv#yQ$pNm;cfAzQj1agLVy>bmF(v`R>DTJuf!* zbFyASYdWE(`qcf{(++Tt8cFDy1$0i`45;z9Pn!X0mm6)9C&J|N5{~d0ogv2 zy#*or>>4GV7*cTRGE{lW)Iqc;Z?uMPVuONmSLi08FEO|t8Qir&GW|iO?-g9ep^0If z=~KhdZFh$kAlZ@_XSn=GV%&Z(k4ohvZZxGI)5J`erj{|iY0)~&>l!K&vtu!9$t-i& z80?Y#3zcmR4LiNHjXQUEpI^ITl@(95`=&(P_(Jp<`u@`O#n|>^x;Dah@*JkZEqR`K z8{$szJ2x;N>~rp9^)Tw}n}Ssfmst@E6tuAls4474_5PwL3&5tLC$LsOEAlgU=4#Pl z3-e`OoDs-D{ewBjSRnJ5?{^VFJg^eYhXS3`sZNa%L%;-Cz)E<$t2`*kT+cn5kTZdwI`Y9Hj{cSJT73J&|;pc^Fc^eMoptL;9_N!X?!MFtE!j-l2uVtj}O`rB%r@4%ANu# a8pTW{qfygH7}}#%(r_7{QYZsCTKpfn6hrI) diff --git a/src/ksctp_socket.c b/src/ksctp_socket.c new file mode 100644 index 0000000..1564619 --- /dev/null +++ b/src/ksctp_socket.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include +#include +#include + + +int main() { + + int socket_listen_fd, + socket_connection_fd, + i, + kq, + client_len, + new_events, + port_num = 36215; + struct sockaddr_in serv_addr, client_addr; + struct kevent change_event, + evList[32], + event; + + socket_listen_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP); + if (((socket_listen_fd) < 0)) + { + perror("Faild creating socket"); + exit(1); + } + + bzero((char *)&serv_addr, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = INADDR_ANY; + serv_addr.sin_port = htons(port_num); + + if (bind(socket_listen_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) + { + perror("Failed bind socket"); + exit(1); + } + + listen(socket_listen_fd, 3); + client_len = sizeof(client_addr); + + kq = kqueue(); + + EV_SET(&change_event, socket_listen_fd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, 0); + if (kevent(kq, &change_event, 1, NULL, 0, NULL) == -1) + { + perror("Failed to bind socket to kevent"); + exit(1); + } + + int x = 0; + + for (;;) { + + printf("-----------SEQ : %d\n", x+1); + + new_events = kevent(kq, NULL, 0, evList, 1, NULL); + + if (new_events == -1) + { + perror("Failed to create new kevent"); + exit(1); + } + + for (int i = 0; new_events > i; i++) + { + printf("Listed events : %d\n", new_events); + int event_fd = evList[i].ident; + + if (evList[i].flags & EV_EOF) + { + printf("Client disconnect...\n"); + close(event_fd); + } + + else if (event_fd == socket_listen_fd) ; + { + printf("New connection incoming...\n"); + + socket_connection_fd = accept(event_fd, (struct sockaddr *)&client_addr, (socklen_t *)&client_len); + if (socket_connection_fd == -1) + { + perror("Failed to accept connection...\n"); + } + + EV_SET(&change_event, socket_connection_fd, EVFILT_READ, EV_ADD, 0, 0, NULL); + if (kevent(kq, &change_event, 1, NULL, 0, NULL) < 0) + { + perror("kevent failed to monitor socket connection"); + } + } + + } + + x=x+1; + } + + +} diff --git a/src/ktcp_socket_02.c b/src/ktcp_socket_02.c index cd36ef0..f5c11f6 100644 --- a/src/ktcp_socket_02.c +++ b/src/ktcp_socket_02.c @@ -14,12 +14,11 @@ int main() { kq, new_events; -struct kevent change_event, event; + struct kevent change_event, event; struct kevent evList[32]; - struct sockaddr_in serv_addr, client_addr; - if (((socket_listen_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)) + if (((socket_listen_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)) { perror("Failed creating socket"); exit(1); @@ -31,7 +30,7 @@ struct kevent change_event, event; serv_addr.sin_port = htons(port_num); if (bind(socket_listen_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) - { perror("Failed binding socket"); exit(1); + { perror("Failed binding socket"); exit(1); } listen(socket_listen_fd, 3);