<div dir="ltr">Buna,<div><div class="gmail_extra"><br><div class="gmail_quote">2016-05-18 11:29 GMT+03:00 Georgiana Diana <span dir="ltr"><<a href="mailto:geodiana93@gmail.com" target="_blank">geodiana93@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">2016-05-18 10:47 GMT+03:00 Madalina Hristache <span dir="ltr"><<a href="mailto:madalina.hristache@gmail.com" target="_blank">madalina.hristache@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Georgiana Diana via so2 <<a href="mailto:so2@cursuri.cs.pub.ro" target="_blank">so2@cursuri.cs.pub.ro</a>>:<br>
<span>> Buna,<br>
> Am o nelamurire in legatura cu implementarea functiei connect:<br>
><br>
> - Inainte de a face connect, ar trebui ca pe socket sa se apeleze bind,<br>
> pentru a il lega de o adresa locala, nu ? Urmand modelul din af_packet[1],<br>
> mi-am declarat o structura ce va retine diverse date despre socketii cu care<br>
> se lucreaza. In bind, adaug in aceasta structura un camp struct sockaddr_stp<br>
> *, care este de fapt parametrul primit la bind.<br>
<br>
</span>E bună abordarea ca idee.</blockquote><div><br></div></span><div>Okay, good to know :)</div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">În plus, tot în bind trebuie să verifci că<br>
portul din structura pe care ai primit-o ca parametru nu este deja<br>
asociat cu un socket. Daca este, returnezi o valoare de eroare. Pentru<br>
asta e util un hashtable, să cauți mai ușor.<br></blockquote><div><br></div></span><div>Yep, done that.</div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span><br>
><br>
> - In connect, va trebui sa conectez adresa primita in bind de adresa remote<br>
> transmisa in connect, nu ? In cazul acesta, as vrea sa ma folosesc de campul<br>
> struct sockaddr_stp * setat anterior in bind.<br>
> M-am uitat in implementarea lui connect din datagram.c[2] si cred ca pentru<br>
> a conecta cele doua adrese este nevoie de apelul ip_route_connect() ?<br>
> Ce nu imi dau seama cum sa fac este cum sa obtin adresele pe 32 biti<br>
> necesare apelului ip_route_connect din datele disponibile in cele doua<br>
> structuri sockaddr_stp primite la bind (pentru socketul local) si connect<br>
> (pentru cel remote).<br>
<br>
</span>În connect nu e nevoie de comanda cu ip_route. Tot ce trebuie să faci<br>
e să reții cumva faptul că socketul tău este asociat cu un socket care<br>
are adresa primită ca parametru. Eu mi-am declarat o structură custom<br>
de socket și un câmp este struct sockaddr-ul primit ca parametru la<br>
connect, să știu cu cine sunt conectat. Sper să nu zic prostii, dar<br>
mie mi-a mers foarte bine abordarea asta.<br></blockquote><div><br></div></span><div>Ah, okay, am inteles. Mult mai simplu asa :)</div></div></div></div></blockquote><div><br></div><div><div><br></div><div>Trecand de bind si connect si ajungand la send/sendto/sendmsg, am din nou o intrebare:</div><div><br></div><div>Este vreo diferenta intre sendmsg si sendto, in ceea ce priveste cazurile de eroare ce ar trebui tratate sau campurile din struct msghdr (il voi nota m) care sunt populate de cele doua apeluri ?</div><div><br></div><div>Erorile pentru ambele as zice ca sunt urmatoarele:</div><div>- socket conectat, dar campul m->msg_name setat => -EISCONN, conform[3];</div></div><div>- socket neconectat, dar campul m->msg_name nesetat => -ENOTCONN, conform[3];</div><div>- (-1) pentru erori interne, conform[3].</div><div><br></div><div>Cat despre campurile ce vor contine mesajul efectiv, din cate inteleg din [3], toate cele trei functii (send, sendmsg, sendto) lucreaza cu m->msg_iov pentru a retine bufferul de trimis. Corect ?</div><div><br></div><div>Si similar pentru write/recvfrom/recvmsg.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span><br>
><br>
> [1] <a href="http://lxr.free-electrons.com/source/net/packet/internal.h?v=3.13#L92" rel="noreferrer" target="_blank">http://lxr.free-electrons.com/source/net/packet/internal.h?v=3.13#L92</a><br>
> [2] <a href="http://lxr.free-electrons.com/source/net/ipv4/datagram.c?v=3.13#L23" rel="noreferrer" target="_blank">http://lxr.free-electrons.com/source/net/ipv4/datagram.c?v=3.13#L23</a></span></blockquote></span></div></div></div></blockquote><div>[3] <a href="http://linux.die.net/man/2/sendto">http://linux.die.net/man/2/sendto</a> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span><br>
<br>
</span>Spor! :)<br>
<br>
Mădă<br>
</blockquote></span></div><br></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><span class=""><div><br></div>-- <br><div><div dir="ltr"><font color="#0000ff"><b>Georgiana Diana Ciocirdel</b></font><div>Polytechnic University of Bucharest,</div><div>Computer Science</div></div></div>
</span></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><font color="#0000ff"><b>Georgiana Diana Ciocirdel</b></font><div>Polytechnic University of Bucharest,</div><div>Computer Science</div></div></div>
</div></div></div>