berkeley socket || connection descriptor

Trädvy Permalänk
Medlem
Registrerad
Sep 2009

berkeley socket || connection descriptor

Hej.

Jag vill kolla om jag förstått rätt.

När man gör en socket via system anrop:
socket() och så vidare...

I C/C++ bibiloteket <sys/socket.h> vist används berkeley sockets då (Ubuntu 16.04 används om det spelar roll)? Om ja, vad är då en "connection descriptor"?

Tack för svar!

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Nov 2004
Skrivet av asdfgh:

Hej.

Jag vill kolla om jag förstått rätt.

När man gör en socket via system anrop:
socket() och så vidare...

I C/C++ bibiloteket <sys/socket.h> vist används berkeley sockets då (Ubuntu 16.04 används om det spelar roll)? Om ja, vad är då en "connection descriptor"?

Tack för svar!

Jag tänker inte lösa din skoluppgift åt dig men på https://en.wikipedia.org kan du hitta mycket matnyttigt om Berkeley Sockets.

WS: MSI B350M Mortar | AMD Ryzen 7 1700 | PH-TC14PE | 32GB DDR4 3000MHz | 120GB Intel 530 | 2*500GB HDD | Asus R9 290X DCU2 4GB | 2*LG W2242PE
Router: Gigabyte GA-870-UD3 | AMD Phenom II x6 1055t @ 2600MHz, 1.25V | 12GB DDR3 | 2*250GB HDD @ RAID1 | 2TB HDD
Laptop: Thinkpad X220 4291-QF6

Trädvy Permalänk
Medlem
Registrerad
Sep 2009

Tack för tipset om sidan där de säger socket descriptor och file descriptor men säger inte ett s**t om någon av dessa är samma som en connection descriptor...

Om du bara antar att alla frågor är någon skoluppgift kanske det är högtid för dig att sluta vara på ett forum då du lika gärna kunde ha gjort en länk till denna.

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Trädvy Permalänk
Medlem
Plats
Jönköping
Registrerad
Nov 2004
Skrivet av asdfgh:

Tack för tipset om sidan där de säger socket descriptor och file descriptor men säger inte ett s**t om någon av dessa är samma som en connection descriptor...

Om du bara antar att alla frågor är någon skoluppgift kanske det är högtid för dig att sluta vara på ett forum då du lika gärna kunde ha gjort en länk till denna.

Den besvarar åtminstone frågan om Berkeley Sockets används i *nix.
Var har du fått just orden "Connection descriptor" ifrån?
En file/socket descriptor är i allt väsentligt en vanlig int som berättar vilken koppling i operativsystemets lista som ska användas för den operation du ber om i din kod.

Edit: här har du ännu mer information; https://www.gnu.org/software/libc/manual/html_node/Sockets.ht...

Skickades från m.sweclockers.com

WS: MSI B350M Mortar | AMD Ryzen 7 1700 | PH-TC14PE | 32GB DDR4 3000MHz | 120GB Intel 530 | 2*500GB HDD | Asus R9 290X DCU2 4GB | 2*LG W2242PE
Router: Gigabyte GA-870-UD3 | AMD Phenom II x6 1055t @ 2600MHz, 1.25V | 12GB DDR3 | 2*250GB HDD @ RAID1 | 2TB HDD
Laptop: Thinkpad X220 4291-QF6

Trädvy Permalänk
Medlem
Registrerad
Sep 2009

när man kör:

man gnutls_transport_set_ptr

Så står det: "In berkeley style sockets this function will set the connection descriptor.". Så då undrar jag jag ju vad en connection descriptor är.

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Trädvy Permalänk
Datavetare
Plats
Stockholm
Registrerad
Jun 2011
Skrivet av asdfgh:

när man kör:

man gnutls_transport_set_ptr

Så står det: "In berkeley style sockets this function will set the connection descriptor.". Så då undrar jag jag ju vad en connection descriptor är.

Tittade som hastigast på GnuTLS och vad gnu_transport_set_ptr() faktiskt gör. Min gissning är att man använder termen "connection descriptor" i syfte att belysa att väldigt få krav ställs på den underliggande transportmekanismen utöver att man ska kunna använda vanliga filoperationer som read()/write().

Trots att de flesta OS är utvecklade i C använder de väldigt många OOP-koncept. I/O-systemet är ett lysande exempel på detta där alla typer av I/O-backends typiskt stödjer just read()/write() , så det är alla i någon mening underklasser till "generic I/O".

Sockets är sedan en underklass som har lite speciella funktioner, som t.ex. accept(), connect(), listen() m.fl. Dessa operationer kräver just en filtyp av underklassen "sockets", de är inte meningsfulla för t.ex. filer och pipes.

Så i korthet: kör man GnuTLS så skulle man lika gärna kunna skicka in en fildeskriptor skapad med pipe() som skapad med socket(). Det enda GnuTLS bryr sig om är att data som skrivs på den deskriptor man ger till gnutls_transport_set_ptr() kan läsas av "den andra sidan", irrelevant hur man rent konkret flyttar dessa bytes.

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer