bind
Functia bind asociaza o adresa locala cu un socket.
Sintaxa
int bind (
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
unde:
s - [in] este un descriptor ce identifica socketul nelegat.name - [in] este adresa de atribuit socketului. Structura sockaddr
este definita in continuare:
struct sockaddr { In afara campului
u_short sa_family;
char sa_data[14];
};
sa_family, continutul sockaddr este exprimat
in ordinea octetilor de retea.
namelen - [in] Este lungimea structurii name. Aceasta functie este folosita atat pentru socketuri
orientate pe conexiune cat si la socketuri fara conexiune. La socketurile
orientate pe conexiune functia bind este apelata inaintea functiei listen().
Atunci cand un socket este creata cu functia socket, exita un spatiu pentru name
in campul rezervat numelui (in familia de adrese), dar nu are asignata nici o
adresa. Functia bind stabileste asocierea locala a sochetului atribuindu-i
astfel un "nume" local unui socket "fara nume".
Spre exemplu, in familia de adrese Internet, un nume consta din trei parti: familia de adrese, adresa hostului si un numar de port care identifica aplicatia. In Windows Sockets 2, parametrul name nu este strict interpretat ca un pointer catre o structura sockaddr. Este convertita la aceasta structura pentru compatibilitate cu Windows Sockets (versiunea mai veche). Furnizorii de servicii sunt liberi sa priveasca aceasta structura ca un bloc de memorie de lungime namelen. Primii doi octeti din acest bloc (ce corespund lui sa_family in declararea structurii sockaddr) trebuie sa contina familia de adrese cu care a fost creat socketul. In caz contrar, va apare o eroare WSAEFAULT.
Daca unei aplicatii nu-i pasa ce adresa locala ii este atribuita, ea poate
specifica valoarea constanta ADDR_ANY in campul sa_data. Aceasta
permite furnizorului de servicii sa foloseasca orice adresa de retea ar fi
potrivita, simplificand potential programarea pe calculatoare host mutihomed
(adica, acelea care au mai mult de o interfata de retea si implicit mai mult de
o adresa). Pentru TCP/IP, daca portul este specificat ca 0, furnizorul de
servicii va atribui un port unic pentru aplicatie cu o valoare intre 1024
si 5000. Aplicatia poate folosi functia getsockname dupa bind pentru a
afla adresa si portul care i-au fost asignate, dar nu daca daca adresa de
Internet este egala cu INADDR_ANY, functia getsockname nu va putea sa furnizeze
o adresa pana cand nu este conectat socketul, deoarece mai multe adrese pot fi
valide daca hostul este multihomed.
Dac nu apare nici o eroare, bind intoarce zero. In caz de eroare, ea
intoarce SOCKET_ERROR (in cazul Windows, un cod de eroare specific poate fi
aflat apeland functia WSAGetLastError)
![]()
© Cornel Mironel Niculae, 2004-2005
13-Nov-2004