ioctlsocket
Functia ioctlsocket controleaza modul de utilizare al unui socket.
int ioctlsocket (
SOCKET s,
long cmd,
u_long FAR* argp
);
unde:
s - [in] este un descriptor ce identifica un socket conectat.cmd - [in] Comanda de efectuat
asupra socketului s.argp - [in/out] Un pointer catre
un parametru al comenzii cmd.Aceasta rutina poate fi utilizata asupra oricarui tip de socket in orice stare. Ea este folosita pentru a obtine sau afla parametrii de operare asociati cu socketul, independent de protocolul folosit sau subsistemul de comunicare. Dam in continuare comenzile suportate si semnificatia lor:
FIONBIO. Permite setarea sau resetarea modului fara blocare
asupra socketului s. Parametrul argp pointeaza
catre un unsigned long, care este diferit de zero daca se
doreste setarea modului fara blocare si zero pentru modul cu blocare. Atunci
cand un socket este creat el opereaza in modul cu blocare. Acest mod este
conform specificatiilor interfetei BSD.WSAAsyncSelect si WSAEventSelect seteaza
automat un socket la modul de operare fara blocare. Daca WSAAsyncSelect
sau WSAEventSelect au fost folosite asupra unui socket atunci
orice incercare de a folosi ioctlsocket pentru a reveni la
modul cu blocare va genera eroarea cu numarul de cod WSAEINVAL.
Pentru a reveni la modul cu blocare, o aplicatie trebuie sa dezafecteze WSAAsyncSelect
prin apelarea functiei WSAAsyncSelect cu parametrul lEvent
egal cu zero, sau sa dezafecteze WSAEventSelect prin apelarea
functiei WSAEventSelect cu parametrul lNetworkEvents egal zero.FIONREAD. Determina cantitatea de date care pot fi citite
automat de la socketul s. Pointerul argp pointeaza catre un unsigned long
in care functia ioctlsocket stocheaza rezultatul.recv. Aceasta poate sau nu sa fie
identica cu cantitatea de date din coada de asteptare a socketului.SOCK_DGRAM,
spre exemplu), atunci comanda FIONREAD intoarce dimensiunea
primei datagrame (mesaj) din coada de asteptare la socket.SIOCATMARK. Detremina daca sau nu toate datele out-of-band
au fost citite. Aceasta comanda se aplica numai socketurilor orientate pe
stream (de exemplu, tipil SOCK_STREAM) care au fost configurate
pentru receptia in-line a oricator date out-of-band (SO_OOBINLINE).
Daca nici un fel de date out-of-band nu asteapta sa fie citite, operatia
intoarce TRUE. In alte situatii, ea intoarce FALSE,
si urmatorul apel al functiei recv sau recvfrom
efectuate asupra socketului va reintoarce o parte sau toate datele ce
precedeaza marcatorul ("mark"). Aplicatia trebuie sa
utilizezaoperatia SIOCATMARK pentru a determina daca exista
vreun rest de date. Daca exista date normale ce preced datele
"urgente" (out of band), ele vor fi receptionate in ordine. (de
notat ca functiile recv si recvfrom nu vor
amesteca niciodata datele normale si out-of-band in acelasi apel.)
Pointerul argp pointeaza catre un unsigned long in care functia
ioctlsocket stocheaza rezultatul boolean.Aceasta functie este un subset al functiei ioctl asa cum este ea
implementata de interfata Berkeley. In particular, nu exista nici o comanda care
sa fie echivalenta cu FIOASYNC, in timp ce comanda SIOCATMARK
este singura comanda la nivel de socket care este suportata.
Valoarea returnata
In caz de reusita, functia ioctlsocket intoarce zero. Altfel
este retunata o valoare SOCKET_ERROR si codul unei erori specifice poate fi
aflat apeland functia WSAGetLastError.
![]()
© Cornel Mironel Niculae, 2004-2005
13-Nov-2004