shutdownFunctia shutdown() dezafecteaza transmisia si / sau receptia
printr-un socket.
Sintaxa:
int shutdown (
SOCKET s,
int how
);
unde:
s - [in] este un descriptor ce identifica socketul.how - [in] Un flag care descrie
ce tip de operatie nu va mai fi permisa.Functia shutdown() se foloseste pentru toate tipurile de socketuri
pentru a dezafecta receptia, transmisia, sau amandoua.
Daca how este SD_RECEIVE, urmatoarele receptii prin
socket sunt interzise. Aceasta nu are efect asupra protocoalelor de pe
nivelurile inferioare.
Pentru socketuri TCP, daca mai sunt date in coada de asteptare care asteapta sa fie receptionate, sau daca ajung date ulterior, conexiunea este resetata, deoarece datele nu pot fi livrate utilizatorului.
Pentru socketuri UDP, datagramele care vin sunt acceptate si adaugate la coada de asteptare. Nu va fi niciodata generat un pachet ICMP de eroare.
Daca how este SD_SEND, urmatoarele transmisii sunt
interzise.
Pentru socketurile TCP, este trimis un FIN.
Setind how la SD_BOTH dezafecteaza atat transmisia cat si receptia conform celor descrise mai jos.
De retinut ca functia shutdown nu inchide socketul, si resurcele atasate socketului
nu vor fi eliberate pana cand nu este apelata functia closesocket().
Pentru a se asigura ca toate datele sunt transmise si receptionate printr-un
socket conectat inainte de a fi inchis, o aplicatie trebuie sa foloseasca
functia shutdown() pentru a inchide conexiunea inainte de apelul
functiei closesocket(). Spre exemplu, pentru a initia o deconectare
gratioasa, o aplicatie poate sa:
1. apeleze WSAAsyncSelect() pentru a se inregistra pentru o
notificare FD_CLOSE,
2. apeleze shutdown() cu how=SD_SEND,
3. atunci cand este receptionat mesajul FD_CLOSE, sa apeleze functia recv()
pana cand returneaza zero, sau SOCKET_ERROR, si sa
4. apeleze closesocket().
Functia shutdown() nu blocheaza indiferent de setarea lui SO_LINGER
asupra socketului.
O aplicatie nu poate refolosi un socket dupa ce a fost apelata functia shutdown(). In particular,
unui furnizor de servicii Windows Sockets nu i se cere sa suporte utilizarea
functiei connect() folosind un astfel de socket.
Daca nici o eroare nu apare, functia shutdown() returneaza zero.
In alte situatii, este returnata o valoare SOCKET_ERROR, si un cod
de eroare specific poate fi aflat apeland WSAGetLastError().
![]()
© Cornel Mironel Niculae, 2004-2005
13-Nov-2004