[so2] [Tema 5] Nelamurire bind, connect si aflare adrese

Madalina Hristache madalina.hristache at gmail.com
Wed May 18 10:47:27 EEST 2016


Georgiana Diana via so2 <so2 at cursuri.cs.pub.ro>:
> Buna,
> Am o nelamurire in legatura cu implementarea functiei connect:
>
> - Inainte de a face connect, ar trebui ca pe socket sa se apeleze bind,
> pentru a il lega de o adresa locala, nu ? Urmand modelul din af_packet[1],
> mi-am declarat o structura ce va retine diverse date despre socketii cu care
> se lucreaza. In bind, adaug in aceasta structura un camp struct sockaddr_stp
> *, care este de fapt parametrul primit la bind.

E bună abordarea ca idee. În plus, tot în bind trebuie să verifci că
portul din structura pe care ai primit-o ca parametru nu este deja
asociat cu un socket. Daca este, returnezi o valoare de eroare. Pentru
asta e util un hashtable, să cauți mai ușor.

>
> - In connect, va trebui sa conectez adresa primita in bind de adresa remote
> transmisa in connect, nu ? In cazul acesta, as vrea sa ma folosesc de campul
> struct sockaddr_stp * setat anterior in bind.
> M-am uitat in implementarea lui connect din datagram.c[2] si cred ca pentru
> a conecta cele doua adrese este nevoie de apelul ip_route_connect() ?
> Ce nu imi dau seama cum sa fac este cum sa obtin adresele pe 32 biti
> necesare apelului ip_route_connect din datele disponibile in cele doua
> structuri sockaddr_stp primite la bind (pentru socketul local) si connect
> (pentru cel remote).

În connect nu e nevoie de comanda cu ip_route. Tot ce trebuie să faci
e să reții cumva faptul că socketul tău este asociat cu un socket care
are adresa primită ca parametru. Eu mi-am declarat o structură custom
de socket și un câmp este struct sockaddr-ul primit ca parametru la
connect, să știu cu cine sunt conectat. Sper să nu zic prostii, dar
mie mi-a mers foarte bine abordarea asta.

>
> [1] http://lxr.free-electrons.com/source/net/packet/internal.h?v=3.13#L92
> [2] http://lxr.free-electrons.com/source/net/ipv4/datagram.c?v=3.13#L23

Spor! :)

Mădă


More information about the so2 mailing list