Gi噂i thi羽u v隠 l壱p trình socket

Một phần của tài liệu Luận văn tốt nghiệp: Lập ứng dụng gói tin cho quản lý mạng máy tính (Trang 38)

Khi vi院t 泳ng f映ng và có nhu c亥u t逢挨ng tác v噂i m瓜t 泳ng f映ng khác, chúng ta th逢運ng d詠a vào mô hình khách/ ch栄 (client/server). Theo mô hình này, 泳ngf映ng có kh違 p<ng ph映c x映ho員c cung c医p nh英ng thông tin gì 8ó g丑i là 泳ng f映ng ch栄 (trình ch栄 hay server). 永ng f映ng g穎i yêu c亥u 8院n trình ch栄 8逢嬰ci丑i là 泳ngf映ng khách (trình khách hay client). M荏 r瓜ng h挨n n英a, server có th吋 là m瓜t máy tính v噂i c医u hìnho衣nh còn client là r医t nhi隠u máy con khác n嘘i vào máy ch栄.

Nh逢 v壱y, tr逢噂c khi yêu c亥u m瓜t f鵜ch x映 c栄a trình ch栄 th詠c hi羽n 8i隠u gì

8ó, trình khách (client) ph違i có kh違 p<ng k院t n嘘i 8逢嬰c v噂i trình ch栄. Quá trình k院t n嘘i này 8逢嬰c th詠c hi羽n thông qua m瓜t c挨 ch院tr瑛u t逢嬰ng hóai丑i là socket (v衣m f鵜ch là “c挨 ch院"鰻 c逸m”). K院t n嘘i gi英a trình khách và trình ch栄 v逢挨ng t詠

nh逢 vi羽c c逸m phích 8i羽n vào 鰻 c逸m 8i羽n. Trình khách th逢運ng 8逢嬰c coi nh逢

phích c逸m 8i羽n, còn trình ch栄 8逢嬰c coi nh逢 鰻 c逸m 8i羽n, m瓜t鰻c逸m có th吋c逸m vào 8ó nhi隠u phích 8i羽n khác nhau e ng nh逢 m瓜t máy ch栄 có th吋 k院t n嘘i và ph映cx映cho r医t nhi隠u máy khách.

N院u k院t n嘘i thành công thì trình khách và trình ch栄 có th吋 trao 8鰻i d英

li羽u v噂i nhau, th詠c hi羽n các yêu c亥u v隠trao 8鰻i d英li羽u. 4.2. Nguyên lý ho衣t 8瓜nge栄a socket

A亥u tiên server m荏 m瓜t 鰻 c逸m socket. Aây ch雨 là quá trình h羽 8i隠u hành phân b鰻 tài nguyên 8吋 chu育n d鵜 k院t n嘘i. Dùng hàm socket() 8吋 t衣o “鰻 c逸m” cho trình ch栄server.

Ti院p 8院n, 8吋"泳ng f映ng khách bi院t 8院n 鰻 c逸m socket e栄a trình ch栄, d衣n ph違i 8員t cho server ch栄 m瓜t cái tên. N院u trên máye映c b瓜 và d詠a vào h羽th嘘ng file e栄a UNIX hay Linux, d衣n có th吋 8員t tên cho socket nh逢 là m瓜t tên file

Ch逢挨ng 4: L壱p trình socket

(v噂i 8亥y 8栄 8逢運ng d磯n). D衣n ch雨 c亥n 8員t tên còn 8逢運ng d磯n th逢運ng 8員t trong th逢 o映c /tmp hay /usr/tmp. A嘘i v噂i giao ti院p o衣ng thông qua giao th泳c TCP/IP têne栄a socket 8逢嬰c thay th院b茨ng khái ni羽m c鰻ng (port). C鰻ng là m瓜t s嘘 nguyên 2 bytes (kho違ng 65000 c鰻ngd衣n có th吋 ch丑n 8員t cho socket) thay th院 cho tên t壱p tin. N院u trình khách và trình ch栄 n茨m trên hai máy khách nhau, giao th泳c TCP/IP còn yêu c亥u xác 8鵜nh thêm 8鵜a ch雨 IP 8吋 k院t n嘘i 8院n máy ch栄"荏xa.

Sau khi 8ã ch雨 8鵜nh tên ho員c s嘘hi羽u port cho socket,d衣n i丑i hàm bind()

8吋 ràng bu瓜c hay 8員t tên chính th泳c cho sockete栄a trình ch栄. Ti院p8院n là ch運

k院t n嘘i t瑛 phía trình khách, trình ch栄 s胤 g丑i hàm listen() 8吋 t衣o hàng 8嬰i nh壱n các k院t n嘘i do trình khách 8逢a 8院n. N院u có yêu c亥u k院t n嘘i t瑛 phía trình khách, trình ch栄 g丑i hàm accept() 8吋 ti院p nh壱n yêu c亥u e栄a trình khách. accept() u胤 t衣o m瓜t socket vô danh khác (unnamed socket), c逸m k院t n嘘i e栄a trình khách vào socket vô danh này và th詠c hi羽n quá trình chuy吋n d英 li羽u trao

8鰻i gi英a khách ch栄. Socket 8逢嬰c 8員t tên tr逢噂c 8ó v磯n ti院p v映c ho衣t 8瓜ng 8吋

ch運nh壱n yêu c亥u t瑛 trình khách khác.

O丑i giao ti院p 8丑c ghi thông qua socket e ng 8挨n gi違n nh逢 vi羽c dùng l羽nh read/write8吋 8丑c ghi trên file. N院u file d詠a vào s嘘mô v違(file descriptor)

8吋 xác 8鵜nh socket c亥n 8丑c ghi cho hàm read/write.

Phía trình khách ch雨 c亥m v衣o m瓜t socket vô danh, ch雨 8鵜nh tên và v鵜 trí socket e栄a trình ch栄. Yêu c亥u k院t n嘘i b茨ng hàm connect() và 8丑c ghi, truy xu医t d英li羽ue栄a socket b茨ng l羽nh read/ write ho員c l羽nh send/ recv.

Ch逢挨ng 4: L壱p trình socket 4.3. L壱p trình v噂i socket

4.3.1. Các thu瓜c tínhe栄a socket

Socket 8逢嬰c 8鵜nh ngh a d詠a trên 3 thành ph亥n thu瓜c tính( attribute)

8ó là: vùng( domain), ki吋u( type) và giao th泳c( protocol). Socket còn c<n c泳 vào m瓜t 8鵜a ch雨 k院t h嬰p v噂i nó. A鵜a ch雨 này ph映thu瓜c vào vùng e栄a socket và th逢運ng 8逢嬰c i丑i là dòng giao th泳c (protocol family). Ví d映

nh逢 dòng giao th泳c theo h羽 th嘘ng file e栄a Sun th逢運ng l医y tên file làm

8逢運ng d磯n 8鵜a ch雨, trong khi giao th泳c TCP/IPn衣i l医y 8鵜a ch雨 IP (32 bits)

8吋tham chi院u và th詠c hi羽n k院t n嘘i v壱t lý.

4.3.1.1. Vùng( domain)

Vùng dùng xác 8鵜nh j衣 t亥ng o衣ng n挨i giao ti院p e栄a Socket di宇n ra. Vùng giao ti院p Socket thông f映ng nh医t hi羽n nay là AF_INET hay gia ti院p socket theo chu育no衣ng Internet. Chu育n này s穎 d映ng 8鵜a ch雨 IP 8吋 xác 8鵜nh nút k院t n嘘i v壱t lý trên o衣ng. Ngoài ra, n院ud衣n ch雨 c亥n giao ti院pe映c b瓜, d衣n có th吋 dùng vùng giao ti院p theo chu育n e栄a Sun AF_UNIX, 8ó là dùng 8逢運ng d磯n và h羽 th嘘ng file 8吋 8員t tên và xác 8鵜nh k院t n嘘i gi英a hai hay nhi隠u 泳ng f映ng. Ch鰯ng j衣n nh逢 ví d映 trên, chúng ta 8ã th詠c hi羽n b茨ng cách 8員t tên cho socket là server_socket, và Linux 8ã t衣o ra file server_socket ngay trên th逢 o映c hi羽n hành (hay trong th逢 o映cv衣m /tmp tùy theo phiên d違n e栄a Linux và UNIX). Tuy nhiên vùng giao ti院p AF_UNIX l衣i ít 8逢嬰c s穎 d映ng trong th詠c t院. Ngày nay h亥u h院t các

泳ngf映ngo衣ng s穎 d映ng socket8隠u theo vùng AF_INET là ch栄y院u. Chúng tau胤 bàn sâu v隠phân vùng này ngay sau 8ây.

Vùng AF_INET nh逢" 8ã nêu s穎 d映ng 8鵜c ch雨 IP (Internet Protocol) là m瓜t ch栄 ngh a s嘘 32 bits8吋 xác 8鵜nh k院t n嘘i v壱t lý. S嘘

Ch逢挨ng 4: L壱p trình socket (adsbygoogle = window.adsbygoogle || []).push({});

hay 127.0.0.1 là các 8鵜a ch雨 IP h嬰p l羽. A鵜a ch雨IP có th吋 8逢嬰c ánh z衣

thành m瓜t tên d宇 nh噂 j挨n nh逢 www.yahoo.com hay www.microsoft.com, chúng 8逢嬰c i丑i là tên vùng (domain name). Vi羽c ánh z衣 8鵜a ch雨 IP thành tên vùng th逢運ng do máy ch栄 DNS (Domain Name Server) th詠c hi羽n. Tuy nhiên, d衣n e ng có th吋 t詠

ánhz衣tên vùng ngay trên mày e映c b瓜b茨ng cách s穎 d映ng t壱p tin d英

li羽u /etc/hosts.

Socket theo dòng giao th泳c IP s穎 d映ng port (s嘘 hi羽u c鰻ng) 8吋 8員t tên cho m瓜t socket. C鰻ng dùng 8吋 phân bi羽t d英 li羽u g穎i 8院nu胤

chuy吋n cho 泳ng f映ng nào. D衣n hình dung n院u 8鵜a ch雨 IP dùng 8吋

xác 8鵜nh 8逢嬰c máy hay n挨i k院t n嘘i v壱t lý 8吋 8逢a d英 li羽u 8院n thì c鰻ng là 8鵜a ch雨 ph映 dùng 8吋g穎i chính xác d英li羽u8院n n挨i 泳ngf映ng c亥n. Ai隠u này do trên m瓜t máy có th吋 có nhi隠u泳ngf映ng cùng ch衣y và cùng s穎 d映ng trùng s嘘 c鰻ng. Do c鰻ng là m瓜t giá tr鵜 nguyên 2 bytes nân d衣n có th吋 s穎 d映ng kho違ng 65000 c鰻ng 8吋 t詠 do 8員t cho socket. Tr瑛 các s嘘 hi羽u c鰻ng n鰻 ti院ng nh逢 FTP, Web 8ã nêu荏 ph亥n trên d衣n không nên s穎 d映ng, còn thì b衣n có th吋 ch丑n s嘘 c鰻ng l噂n

j挨n 1024"8吋m荏cho sockete栄a泳ung f映ng.

M荏 socket theo AF_INET không khác m医y so v噂i AF_UNIX ngoài vi羽c 8員t tên và ch雨 8鵜nh s嘘hi羽u c鰻ng. Ví d映:

/* Mぞsocket theo kxt nぐi IP */

server_sockfd = socket (AF_INET, SOCK_STREAM, 0); server_address.sin_family = AF_INET;

server_address.sin_addr.s_addr = inet_addr(“127.0.0.1”); server_address.sin_port = 1234;

Ch逢挨ng 4: L壱p trình socket

Ngoài vùng giao ti院p AF_UNIX và AF_INET, d衣n còn có th吋

g員p AF_ISO dành cho chu育n giao th泳c o衣ng theo ISO hay AF_NS dành cho h羽 th嘘ng o衣ng Xerox, tuy nhiên chúng không 8逢嬰c s穎 f映ng th逢運ng xuyên, cho nên tau胤 không8隠c壱p 8院n chi ti院t.

5.3.1.2. Ki吋u socket(type)

V噂i m厩i vùng domain e栄a socket, d衣n có th吋 có nhi隠u cách giao ti院p. Có hai ki吋u giao ti院p ki吋u giao ti院p 8i吋n hình 8s là giao ti院p m瓜t chi隠u (SOCK_DGRAM) và giao ti院p d違o 8違m hai chi隠u (SOCK_STREAM). D英 li羽u khi chuy吋n 8i 8逢嬰c 8óng thành t瑛ng gói (data package hay datagram). SOCK_STREAM và SOCK_DGRAM qui 8鵜nh cách chuy吋n gói d英 li羽u theo hai cách nh逢 sau:

SOCK_STREAM luôn gi英 k院t n嘘i và b違o 8違m gói thông tin g穎i 8i 8逢嬰c chuy吋n8院n 8ích và nh壱n 8亥y 8栄. Sau khi nh壱n xong d英

li羽u, n挨i nh壱n u胤g穎i thông tin ph違n h欝i cho n挨i g穎i và quá trình g穎i ch雨 8逢嬰c xác nh壱n hoàn t医t khi nh壱n 8逢嬰c 8亥y 8栄th欝ng tin g穎i nh壱n

荏 c違 hai phía khách ch栄. Ki吋u truy隠n d英 li羽 socket này trong vùng giao th泳c o衣ng Internet AF_INET 8逢嬰c i丑 là giao th泳c truy隠n TCP. Khi k院t h嬰p v噂i c挨 ch院 8鵜nh tuy院n theo 8鵜a ch雨 IP chúng 8逢嬰c

i丑i t逸t là TCP/IP. K院t n嘘i và truy隠n d英 li羽u theo cách này tuy d違o

8違m nh逢ng t嘘n nhi隠u tài nguyên e栄a h羽 th嘘ng do k院t n嘘i ph違i duy trì và theo dõi th逢運ng xuyên.

SOCK_DGRAM cách g穎i nh衣n d英 li羽u này ch雨 di宇n ra m瓜t chi隠u. Trình khách, n挨i g穎i d英 li羽u 8i không c亥n bi院t trình ch雨 (n挨i nh壱n) có nh壱n 8逢嬰c gói d英 li羽u 8亥y 8栄 hay không. Trình ch栄 khi nh壱n 8逢嬰c d英li羽ue ng không c亥n thông báo hay xác nh壱n v噂i trình khách là d英 li羽u 8ã nh壱n xong. Cách g穎i này có v飲 không an toàn

Ch逢挨ng 4: L壱p trình socket

nh逢ng bù l衣i th詠c hi羽n nhanh và không tiêu t嘘n nhi隠u tài nguyên 8吋

duy trì k院t n嘘i và ki吋m tra d英 li羽u nh壱n g穎i. Ki吋u truy隠n d英 li羽u socket này trong vùng giao th泳c o衣ng Internet AF_INET 8逢嬰c i丑i là giao th泳c truy隠n UDP (User Datagram Protocol). Khi k院t h嬰p v噂i

e挨 ch院 8鵜nh tuy院n theo 8鵜c ch雨 IP chúng 8逢嬰ci丑i t逸t là UDP/IP. Do tính ch医t không 8違m d違o nên UDP 8逢嬰c dùng nhi隠u trongo衣ng v噂i

o映c 8ích thông báo hay g穎i tin tin 8院n m瓜t nhóm máy tính nào 8ó trong o衣ng. Nó ít khi 8逢嬰c dùng trong các f鵜chx映c亥n s詠 chính xác cao nh逢 g穎i nh壱n file hay k院t nói c挨 s荏 d英li羽u.

4.3.1.3. Giao th泳ce栄a socket( protocol)

Giao th泳c là cách qui逢噂c g穎i nh壱n d英li羽u gii英a hai hay nhi隠u máy tính trong m衣ng. Tùy theo m厩i ki吋u g穎i nh壱n d英 li羽u mà ta có các giao th泳c khác nhau. Hi羽n nay ki吋u g穎i nh壱n theo giao th泳c TCP và UDP là s穎 d映ng nhi隠u nh医t. Tuy nhiên 8i隠u này không b逸t bu瓜c, TCP và UDP ch雨 là cách cài 8員t cho vùng socket AF_INET theo giao ti院p Internet mà thôi. Ví d映, ban có th吋 cài 8員t m瓜t giao th泳c khác thay cho UDP áp f映ng cho cách chuy吋n d英 li羽u không (adsbygoogle = window.adsbygoogle || []).push({});

d違o 8違m. Mõi ki吋u socket 8隠u có giao th泳c m員c 8鵜nh áp f映ng cho nó. Trong t医t e違 các hàm socket sau này, tùy ch丑n protocol n院u có yêu c亥u d衣n có th吋 8員t giá tr鵜 0"8吋 yêu c亥u s穎 d映ng giao th泳c m員c

8鵜nh.

Trong các ví d映"荏ph亥n sau ta ch雨t壱p trung nghiên c泳u v隠 vùng socket AF_INET và 8鵜a ch雨 IP thay cho vùng AF_UNIX. V噂i AF_INET o丑i 泳ng f映ng o衣ng e栄a d衣n 8隠u có th吋 giao ti院p 8逢嬰c v噂i nhau b医t k吋 chúng 8ang ch衣y trên Windows, Linux hay UNIX.

Ch逢挨ng 4: L壱p trình socket

4.3.2. T衣o socket

H羽th嘘ng cung c医p chod衣n hàm socket()8吋 t衣o m噂i m瓜t socket. Hàm socket() tr違v隠s嘘nguyên int cho bi院t s嘘mô v違hay 8鵜nh danh dùng

8吋truy c壱p socket sau này. #include <sys/types.h> #include <sys/socket.h>

int socket(int domain, int type, int protocol);

Tham s嘘 domain ch雨 8鵜nh vùng hay j丑 8鵜a ch雨 áp 8員t cho socket.

domain có th吋nh壱n m瓜t trong các giá tr鵜 sau:

AF_UNIX Mぞsocket kxt nぐi theo giao thとc file (xuXt nhfp socket dばa trên xuXt nhfp (file)eてa UNIX/Linux

AF_INET Mぞsocket theo giao thとc Internet (sぬ dつng 8おa chえ IP8あkxt nぐi)

AF_IPX Vùng giao thとc IPX (oTng Novell)

AF_IS Chubn giao thとc ISO

AF_NS Giao thとc Xerox Network System

D違ng 4-1 Các giá tr鵜 c栄a domain

H亥u nh逢 d衣n ch雨 s穎 d映ng AF_UNIX và AF_INET là chính. Các vùng giao th泳c khác 8ã l厩i th運i và hi羽n nay ít còn 8逢嬰c s穎 d映ng.

Tham s嘘 type trong hàm socket() dùng ch雨 8鵜nh ki吋u giao tiép hay truy隠n d英 li羽u e栄a socket. D衣n có th吋 ch雨 8鵜nh b茨ng SOCK_STREAM dùng cho truy隠n d英 li羽u d違o 8違m ho員c SOCK_GRAM dùng cho truy隠n không d違o 8違m.

Ch逢挨ng 4: L壱p trình socket

Tham s嘘 protocol dùng8吋 ch丑n giao th泳c áp f映ng cho ki吋u socket( trong tr逢運ng h嬰p có nhi隠u giao th泳c áp f映ng cho m瓜t ki吋u truy隠n). Tuy nhiênd衣n ch雨 c亥n 8員t giá tr鵜0 (l医y giao th泳c m員c 8鵜nh). AF_INET ch雨 cài

8員t m瓜t giao th泳cduy nh医t cho các ki吋u truy隠n SOCK_STREAM và SOCK_DGRAM 8ó là TCP và UDP.

N院u v衣o socket thành công, hàm u胤 tr違 v隠 s嘘 8鵜nh danh socket( descriptor). D衣n s穎 d映ng s嘘 8鵜nh danh này trong t医t e違 các l運i i丑i truy xu医t socket khác nh逢 read/write. S嘘 này t逢挨ng t詠 nh逢 s嘘 8鵜nh danh file mà b衣n th逢運ng dùng 8吋 8丑c và ghi file. A丑c/ ghi vào socket e ng 8欝ng ngh a v噂i g穎i và nh壱n d英li羽u gi英a trình khách và trình ch栄.

4.3.3. A鵜nh 8鵜a ch雨cho socket

Khi socket 8ã 8逢嬰c v衣o ra, d衣n ch雨 c亥n ch雨 8鵜nh 8鵜a ch雨 và tên cho socket. M瓜t socket c亥n ph違i có 8鵜a ch雨 và tên 8吋 các trình khách có th吋

tham chi院u 8院n. Tùy m厩i vùng giao th泳c mà cách 8ánh 8鵜a ch雨 có th吋

khác nhau.

Ví d映khi d衣n dùng vùng giao th泳c AF_UNIX d詠a trên h羽th嘘ng t壱p tin, 8鵜a ch雨 socket 8逢嬰c 8鵜nh ngh a trong c医u trúc sockaddr_un e栄a file include sys/un.h nh逢 sau:

struct sockaddr_un{

sa_family_t sun_family; /* AF_UNIX */

char sun_path []; /* 8⇔ぜng ddn */ (adsbygoogle = window.adsbygoogle || []).push({});

Ch逢挨ng 4: L壱p trình socket

Trong Linux sa_family_t 8逢嬰c 8鵜nh ngh a là ki吋u short. sun_path là

8逢運ng d磯n8吋 t衣o t壱p tin socket.

Vùng AF_UNIX 8逢嬰c s穎 d映ng nhi隠u trong các 泳ng f映ng e映c b瓜

trên o丑t máy vì nó ph映 thu瓜c vào 8逢運ng d磯n t壱p tin tuy羽t 8嘘i e栄a h羽 8i隠u hành.

Th詠c t院 b衣nu胤 dùng AF_INET v噂i c医u trúc 8鵜a ch雨 8逢嬰c 8鵜nh ngh a trong sockadd_ine栄a file include netinet/in.h nh逢 sau:

struct sockadd_in{

short in sin_family; /* AF_INET */

unsigned short int sin_port; /* sぐcごng */

struct in_addr sin_addr; /* Aおa chえIP */

};

C医u trúc in_addr môv違 8鵜a ch雨 IP 8逢嬰c 8鵜nh ngh a nh逢 sau: struct in_addr{

unsigned long int s_addr; };

Nh逢 d衣n th医y 8鵜a ch雨 IP là m瓜t s嘘long (4 bytes hay 32 bits). Aây

e ng chính là c医u trúc 8鵜a ch雨 cho m瓜t ch逢挨ng trình giao ti院p v噂i nhau quao衣ng Internet.

Trên quan 8i吋m e栄a l壱p trình 泳ngf映ng, cho dù socket có 8鵜nh 8鵜a ch雨 theo vùng nào 8i ch<ng n英a m瓜t khi 8ã m荏 8逢嬰c socket, d衣n ch雨 c亥n xem socket nh逢 m瓜t t壱p tin và th詠c hi羽n thao tác read/write trên 8ó(

Ch逢挨ng 4: L壱p trình socket

4.3.4.A員t tên cho socket

Sau khi 8ã 8鵜nh 8鵜a ch雨, d衣n ch雨 c亥n 8員t tên cho socket. A嘘i v噂i AF_UNIX 8鵜c ch雨 chính là 8逢運ng d磯n, còn tên chính là tên t壱p tin8吋 t衣o socket. A嘘i v噂i vùng giao th泳c AF_INET 8鵜a ch雨 chính là s嘘 IP còn tên chính là s嘘 hi羽u c鰻ng (sin_port) trong c医u trúc sockaddr_in. Khi 8ã gán thông tin 8亥y 8栄cho socketd衣n c亥ni丑i hàm bind()8吋rabgd bu瓜c nh英ng thông tin này cho socket 8ã m荏ra tr逢噂c 8ó.

#include <sys/socket.h>

int byte (int socket, const struct sockaddr *address, size_t address_len);

Hàm h羽 th嘘ng bind() s穎 d映ng các thông tin trong c医u trúc address

8吋 gán cho socket s嘘 8鵜nh danh socketd tr違 v隠b荏i hàm socket() tr逢噂c 8ó. Tham s嘘 address_len cho bi院t chièu dài e栄a c医u trúc (struct sockaddr*) truy隠n vào hàm. D衣n l逢u ý sockaddr là c医u trúc t鰻ng quát cho e違

sockaddr_un và sockaddr_in

Khi ràng bu瓜c thành công bind()u胤 tr違v隠 tr鵜 0. N院u không hàm u胤 tr違 v隠

-1 và errnou胤ch泳a m瓜t trong các l厩i sau:

Mã l厩i Môv違

EBADF SぐmôvVfile không hぢp lう

ENOTSOCK SぐmôvVfile không dành cho socket

EINVAL SぐmôvVfile tham chixu8xn mじt socket 8ã có. (adsbygoogle = window.adsbygoogle || []).push({});

EADDRNOTAVAIL Aおa chえkhông xác 8おnh

EADDRINUSE Aおa chえ và cごng ràng buじc 8ã bお mじt socket khác chixm fつng

Ch逢挨ng 4: L壱p trình socket

N院u d衣n m荏 socket thu瓜c vùng AF_UNIX errno có th吋 nh壱n thêm các l厩i sau:

Mã l厩i Môv違

EACCESS Không thあ tTo file cho socket do không có quyznvTo file

ENOTDIR,

ENAMETOOLONG

Tên file không hぢp lう

D違ng 4-3 Các mã l厩i e栄a domain AF_UNIX

Ràng bu瓜c tên socket là b逢噂c quan tr丑ng nh医t 8吋socket e栄a d衣n có kh違 p<ng nhìn th医y và truy xu医t 8逢嬰c t瑛 các泳ngf映ng bên ngoài.

M瓜t socket n院u ch逢a 8逢嬰c 8員t tên i丑i là socket vô danh ( unnamed socket).

4.3.5.V衣o hàng 8嬰i cho socket

A吋 8ón nh壱n các k院t n嘘i chuy吋n 8院n, socket trình ch栄 ph違i v衣o ra m瓜t hàng 8嬰i (queue). O映c 8íche栄a hành 8嬰i làn逢un衣i các k院t n嘘i ch逢a

8逢嬰c trình ch栄 x穎 lý k鵜p. Hàm h羽 th嘘ng listen() u胤 th詠c hi羽n công vi羽c này.

#include <sys/socket.h>

int listen(int socketd, int backlog);

Tham s嘘socketd cho bi院t s嘘môv違socket c亥nv衣o hàng 8嬰i. backlog là s嘘 k院t n嘘i t嘘i 8a 8逢嬰c phép 8逢a vào hàng 8嬰i. N院u m瓜t k院t n嘘i 8院n trình ch栄trong khi 8ã có backlog k院t n嘘i tr逢噂c 8ó ch逢a x穎 lý thì k院t n嘘i

Một phần của tài liệu Luận văn tốt nghiệp: Lập ứng dụng gói tin cho quản lý mạng máy tính (Trang 38)