Kanskje på serverterminalen er antallet nåværende innkommende forespørsler begrenset. Hvis kundens innkommende anrop kommer raskere, kan serveren behandle data, kan køen bli overbelastet, og fremtidige innkommende forespørsler vil bli avslått av et økende unntak. Størrelsen på denne køen er gitt som en parameter til lyttemetoden. Oppsettet vil imidlertid påkalle sin innebygde begrensning på pakkestørrelsen.
Bruk ACCEPT () -metoden med Packet Terminal Protocols (SOCK_STREAM, SOCK_SEQPACKET). Den aksepterer den første forespørselspakken for mottakende port, SOCKFD, fra køen med innkommende forespørsler, etablerer en ny tilknyttet port og gir en ny bestemt fil for kontakten. Den nydannede tilkoblingen er ikke konfigurert til å lytte. Denne funksjonen påvirker ikke den primære terminalen SOCKFD.
Syntaks av socket aksepterer funksjonen på C -språket
# int aksepterer (int sockfd, struct sockaddr *addr, socklen_t *addrlen)
Accept () -funksjonen inneholder forskjellige parametere, som inkluderer SOCKFD, *ADDR og *ADDRLEN. Følgende er detaljene i disse argumentene:
"SOCKFD" -parameteren er en port som ble utviklet ved å bruke en stikkontakt, koblet til en fysisk adresse ved å binde. Men det venter også på oppføringer etter en lytting.
Parameteren “Addr” er en “Sockaddr” -konfigurasjonspeker. Plasseringen av jevnaldrende porten bestemmes av nettverksnivået og gis inn i dette elementet. Sockets IP -klasse indikerer den optimale syntaksen til IP -en som er gitt av "addr". Ingenting ville bli lastet inn når parameteren “addr” blir null; “Addrlen” har aldri blitt brukt i denne situasjonen, og det må også være null.
Parameteren "Addrlen" er en verdsettelsesparameter: Mottakeren kan konfigurere den med dimensjonen til strukturen referert til av parameteren "Addr", og den vil gi den opprinnelige størrelsen på referanseport. Hvis den spesifiserte cachen er for begrenset, vil den hentede verdien bli trimmet. I denne situasjonen vil "addrlen" -parameteren gi en utgang som er betydelig større enn verdien som er gitt til funksjonen.
Accept () -funksjonen holder klienten med mindre en tilkobling er funnet når det ikke er eksisterende forespørsler i køen og porten kanskje ikke settes som ikke-blokkering. Accept () -funksjonen vises med unntaket Eagain eller eWouldBlock når oppsettet er konfigurert ikke-blokkering og det er ingen venteforespørsler i køen.
Eksempel på socket aksepterer () -funksjonen på C -språk i Ubuntu 20.04
Vi skal skrive programmet som viser at aksepten () -funksjonen forsinker samtalen.
Først importerer vi noen nødvendige overskriftsfiler. Biblioteket inkluderer bruk av standardinngangs- og utgangsmetodologier. indikerer forskjellige kategorier av symboler og rammer, omhandler funksjonaliteten til kontakten. Spesifiser deretter den symboliserte variabelen som vil bli brukt som destinasjonsnoden i rammene gitt til funksjonen, og omhandler de forskjellige funksjonalitetene i strengen. Deretter definerer vi etterslep 3. Den inneholder alle de viktige faktorene som er nødvendige for å produsere den integrerte designen.
Her kaller vi Main () -funksjonen. Innenfor kroppen til hovedfunksjonen () initialiserer vi noen variabler som brukes i dette programmet. Vi erklærer den strukturelle pekeren for variabel “Sockaddr_in my_addr”. For å lage en stikkontakt, bruker vi metoden for stikkontakt (). I tillegg har vi vært bindende ved hjelp av Bind () -funksjonen. Og tilordne verdien av bind () -funksjonen til "B" -variabelen. Bind () -metoden inneholder forskjellige argumenter. Vi har brukt en nestet if-ests-tilstand i dette tilfellet. Først definerer vi tilstanden til "hvis" -uttalelsen. Hvis verdien av "B" -variabelen er større enn 0, skriver printf () -funksjonen teksten "bindet med suksess".
Ellers stopper PRINTF () -funksjonen utførelsen av programmet ved å vise meldingen “Bindingsfeil”. For lytteformål kalles lytte () -funksjonen. Vi vil initialisere en variabel “l” for å lagre verdien av lytt () -funksjonen. Listen () -funksjonen har to parametere. Nå bruker vi tilstanden på verdien av å lytte hvis verdien av "L" er større enn 0, printf () metoden blir kalt for å vise meldingen "lytting". PRINTF () -funksjonen viser "ikke lytting" hvis den spesielle tilstanden ikke er oppfylt.
Tilsvarende, for å akseptere systemforespørsler, har vi brukt aksepteringsfunksjonen (). Nok en gang for denne funksjonen, vil vi bruke IF-Else-tilstanden. Verdien av aksepten () -funksjonen lagres i variabelen “ACC”. Hvis verdien av "ACC" -variabelen vil være større enn 0, kaller vi printf () -metoden for å skrive ut linjen "akseptert". Ellers kaller vi PRINTF () -klæringen for å skrive ut "ikke akseptert". Så på denne måten vil vi avslutte koden.
Vi mottar denne typen utdata etter å ha kjørt forrige kode.
Konklusjon
Vi har vedlagt socket aksepterer 2 c -funksjon i detalj i denne artikkelen. Accept () -funksjonen kalles for å godta systemforespørslene. Vi må importere forskjellige biblioteker før vi bruker aksepteringsfunksjonen (). Denne funksjonen inneholder parametere som er ansvarlige for forskjellige funksjonaliteter. Systemanropene gir en bestemt filidentifikator for den mottatte porten hvis de blir utført vellykket. Men i tilfelle feil viser koden unntaket ved å skrive ut -1. Når en nettverkstilkobling blir bedt om, sendes et tilgjengelig signal, og brukere vil deretter bruke Accept () for å motta en port for denne typen tilkoblinger.