Bài giảng Lập trình mạng: Lập trình socket nâng cao: Tùy biến socket - TS. Nguyễn Hoài Sơn

48 1 0
Bài giảng Lập trình mạng: Lập trình socket nâng cao: Tùy biến socket - TS. Nguyễn Hoài Sơn

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài này đề cập đến lập trình socket nâng cao - tùy biến socket với các nội dung như: Tùy biến socket, xử lý tín hiệu POSIX, xuất nhập dữ liệu với ngắt tín hiệu, các hàm xuất nhập dữ liệu nâng cao. Mời các bạn cùng tham khảo.

Lập trình socket nâng cao: Tùy biến socket TS Nguyễn Hồi Sơn Bộ mơn mạng Truyền thơng máy tính, Đại học Công nghệ, Đại học QG Hà Nội Nội dung     Tùy biến socket Xử lý tín hiệu POSIX Xuất nhập liệu với ngắt tín hiệu Các hàm xuất nhập liệu nâng cao It‘s important to know about some of these topics, although it might not be apparent how and when to use them Chúng ta thiết lập tùy chọn nào?  Tùy chọn socket  Liên quan đến cách thức hoạt động socket giao thức mạng (TCP/IP)   Tùy chọn chung, tùy chọn IPv4, IPv6, TCP Tùy chọn file  Liên quan đến cách thức xử lý xuất nhập liệu  Xuất nhập liệu không đồng bộ, xuất nhập liệu dựa tín hiệu, thiết lập sở hữu socket Tùy biến socket  Cách thức hoạt động socket quy định nhiều thuộc tính    Làm trễ gói tin, kích thước đệm, quy trình đóng socket,… Thiết lập tùy biến socket để thông báo cho OS/Protocol Stack cách thức hoạt động socket mà muốn Có hai loại   Tùy biến chung (áp dụng cho tất (nhiều) loại socket) Tùy biến áp dụng cho giao thức định Kiểu tùy biến  Tùy biến nhị phân:  biểu thị cờ nhị phân  1: cho phép, 0: không cho phép …  1 … Tùy biến theo giá trị  có giá trị kiểu int, timeval, in_addr, sockaddr, etc getsockopt(): Đọc giá trị tùy biến #include int getsockopt( int sockfd, int level, int optname, void *opval, socklen_t *optlen);      sockfd: mô tả socket level: loại tùy biến: tùy biến chung (SOL_SOCKET) hay tùy biến với loại giao thức định (IPPROTO_IP, IPPROTO_IPV6, IPPROTO_TCP) optname: số nguyên dương đặc tả tùy biến optval: trỏ đến biến lưu giá trị tùy biến optlen: trỏ đến biến lưu kích thước tùy biến Chương trình: sockopt/checkopts.c setsockopt(): Thiết lập giá trị tùy biến #include int setsockopt( int sockfd, int level, int optname, const void *opval, socklen_t optlen);   optval: trỏ đến biến lưu giá trị tùy biến gán optlen: Kích thước tùy biến Tùy biến chung  Các tùy biến áp dụng với nhiều loại giao thức khác   Một số tùy biến chung áp dụng với số kiểu socket định (SOCK_DGRAM, SOCK_STREAM) Một số tùy biến chung SO_BROADCAST SO_DONTROUTE SO_ERROR SO_KEEPALIVE SO_LINGER SO_RCVBUF,SO_SNDBUF SO_REUSEADDR Tùy biến SO_BROADCAST  Tùy biến nhị phân: cho phép/khơng cho phép gửi gói tin phát tràn    Ngăn ứng dụng gửi gói tin phát tràn cách vô ý thức   Đ/k: Tầng liên kết liệu phải hỗ trợ gửi phát tràn Không áp dụng với SOCK_STREAM sockets OS kiểm tra cờ nhị phân trước gửi gói tin có địa broadcast Ví dụ: bcast/dgclibcast1.c Tùy biến SO_DONTROUTE  Tùy biến nhị phân: cho phép/không cho phép bỏ qua chế định tuyến thông thường   E.g Gói tin gửi thẳng đến card mạng thích hợp dựa địa đích Được sử dụng chương trình định tuyến (e.g routed and gated) 10 Xuất nhập liệu nâng cao 34 Giới thiệu  Chúng ta xuất nhập liệu qua socket với hàm read(), write() nhưng…   Chúng ta khơng có tùy biến Chúng ta cần     thiết lập timeout cho lệnh gọi xuất nhập socket tiến trình khơng bị dừng xuất nhập liệu socket gửi nhận liệu từ nhiều buffers … 35 Socket Timeouts  Các cách đặt timeout cho gọi xuất nhập liệu socket  Gửi thông báo (alarm)   Sử dụng hàm select chờ xuất nhập liệu thời gian định trước   sinh tín hiệu SIGALRM hết thời gian định trước học sau Sử dụng tùy chọn socket SO_RCVTIMEO SO_SNDTIMEO 36 Xuất nhập liệu socket với timeout sử dụng SIGALRM  Thiết lập việc gửi tín hiệu SIGALRM thiết lập hàm xử lý tín hiệu SIGALRM alarm clock turn off alarm call a socket I/O set an alarm clock for the process I/O socket call return alarm clock call a socket I/O set an alarm clock for the process handle SIGALRM 37 connect with a timeout using SIGALRM  lib/connect_timeo.c 38 recvfrom with a Timeout Using SIGALRM  advio/dgclitimeo3.c 39 Xuất nhập liệu socket với timeout sử dụng tùy biến socket SO_RCVTIMEO  Tùy biến socket SO_RCVTIMEO    cho phép đặt timeout cho việc nhận liệu socket Tham số hàm sockopt trỏ trỏ đến cấu trúc thời gian timeval Thiết lập áp dụng cho tất thời gian 40 Xuất nhập liệu socket với timeout sử dụng tùy biến socket SO_RCVTIMEO  advio/dgclitimeo2.c 41 Các vấn đề với thiết lập timeout  Thiết lập thời gian timeout nào?     thời gian trễ hai peer Thời gian xử lý server … Xử lý hết thời gian timeout nào?   thực lại phiên truyền tin? gửi lại thông báo? 42 Ba phiên read() write()  recv() and send()   readv() and writev()   cho phép thiết lập tham số thứ chứa cờ gửi đến kernel cho phép định chuỗi buffer để nhận gửi liệu recvmsg() and sendmsg()  kết hợp tất đặc điểm hàm xuất nhập liệu khác 43 Các hàm recv and send #include ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags); Both return: number of bytes read or written if OK, –1 on error  thiết lập cờ chức cho việc xuất nhập liệu      MSG_DONTROUTE: bỏ qua truy vấn bảng định tuyến MSG_DONTWAIT: không chờ xuất nhập liệu MSG_OOB: gửi nhận liệu luồng (out-of-band) MSG_PEEK: kiểm tra liệu vào giữ nguyên liệu buffer MSG_WAITALL: đợi tất liệu yêu cầu 44 Các hàm readv and writev Cho phép gửi nhận liệu từ nhiều đệm lần gọi hàm   Có thể dùng với đặc tả file khác nhau, không với socket #include ssize_t readv(int fd, const struct iovec *iov, int iovcnt); ssize_t writev(int fd, const struct iovec *iov, int iovcnt); Both return: number of bytes read or written, –1 on error struct iovec { void *iov_base; /* địa bắt đầu buffer */ size_t iov_len; /* kích thước buffer */ }; 45 Hàm recvmsg sendmsg  Dạng tổng quát tất hàm xuất nhập #include ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags); Both return: number of bytes read or written if OK, –1 on error struct msghdr { void *msg_name; /* protocol address */ socklen_t msg_namelen; /* size of protocol address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* # elements in msg_iov */ void *msg_control; /* ancillary data (cmsghdr struct) */ socklen_t msg_controllen; /* length of ancillary data */ int msg_flags; /* flags returned by recvmsg() */ }; 46 Trước gọi hàm recvmsg 47 Sau hàm recvmsg trả kết 48 ... hiệu, thiết lập sở hữu socket Tùy biến socket  Cách thức hoạt động socket quy định nhiều thuộc tính    Làm trễ gói tin, kích thước đệm, quy trình đóng socket, … Thiết lập tùy biến socket để... optval: trỏ đến biến lưu giá trị tùy biến optlen: trỏ đến biến lưu kích thước tùy biến Chương trình: sockopt/checkopts.c setsockopt(): Thiết lập giá trị tùy biến #include int setsockopt(... optval: trỏ đến biến lưu giá trị tùy biến gán optlen: Kích thước tùy biến Tùy biến chung  Các tùy biến áp dụng với nhiều loại giao thức khác   Một số tùy biến chung áp dụng với số kiểu socket định

Ngày đăng: 08/05/2021, 15:33

Tài liệu cùng người dùng

Tài liệu liên quan