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

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Fri May 20 12:03:49 EEST 2016


Georgiana Diana <geodiana93 at gmail.com> writes:
> 2016-05-19 22:41 GMT+03:00 Razvan Deaconescu via so2 <so2 at cursuri.cs.pub.ro>:
>> Georgiana Diana via so2 <so2 at cursuri.cs.pub.ro> writes:
>> > Trecand de bind si connect si ajungand la send/sendto/sendmsg, am din
>> nou o
>> > intrebare:
>> >
>> > 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 ?
>> >
>> > Erorile pentru ambele as zice ca sunt urmatoarele:
>> > - socket conectat, dar campul m->msg_name setat => -EISCONN, conform[3];
>> > - socket neconectat, dar campul m->msg_name nesetat => -ENOTCONN,
>> > conform[3];
>> > - (-1) pentru erori interne, conform[3].
>>
>> Păi nu ai nevoie de vreo implementare de sendto, folosești doar
>> sendmsg. La fel, folosești doar recvmsg. Poate e ceva ce nu înțeleg din
>> ce întrebi.
>
> Dap, stiu ca toate trei functiile de send/receive sunt tratate in
> sendmsg/recvmsg, dar nu mi-era foarte clar daca exista vreo diferenta in
> felul in care sunt setate campurile din structurile primite ca parametru
> sau daca exista vreo diferenta in codurile de eroare ce ar trebui intoarse,
> in functie de functia apelata din user space, ...
>
>> > 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 ?
>>
>> Da.
>
> ... , dar din cate inteleg din raspunsul tau, nu ar fi, iar diferenta
> dintre apelul sendmsg si sendto din user space ar fi aceea ca folosind
> sendmsg poti seta in msghdr-ul trimis si campurile de control ale mesajului
> ?

Nu înțeleg ce mă întrebi. Implementările din kernel (sendmsg și recvmsg)
folosesc structura de tipul msghdr.

Poți presupune că toate pachetele au configurat câmpul msg_name. Dacă
nu-l au, e o problemă.

Nu sunt convins că am ajutat cu răspunsul. Dacă e cazul, să clarifici,
te rog, întrebarea.

>> >> [3] http://linux.die.net/man/2/sendto

Răzvan


More information about the so2 mailing list