Lập trình mạng Python: giao thức UDP (phần 17)

Các tuỳ chọn Socket

Giao diện Socket POSIX hỗ trợ tất cả các loại tuỳ chọn socket cái kiểm soát các hành
vi cụ thể của các sockets mạng. Tuỳ chọn IP_MTU_DISCOVER cái bạn thấy trong phần code
trên chỉ là phần nổi của tảng băng chìm. Các tuỳ chọn được truy cập qua các phương thức
socket Python getsockopt() và setsockopt(), sử dụng các tuỳ chọn cái tài liệu hướng dẫn
hệ điều hành của bạn liệt kê cho hai lời gọi hệ thống này. Trên Linux, thử xem trang manual
socket(7), udp(7), và – khi bạn tiến tới học phần tiếp theo.
Khi thiết lập các tuỳ chọn socket, bạn trước tiên phải đặt tên nhóm tuỳ chọn trong đó chúng
hoạt động và sau đó, như một đối số tiếp theo, đặt tên tuỳ chọn thực sự bạn muốn thiết lập.
Tham vấn manual hệ điều hành của bạn cho các tên của các nhóm này. Giống như các lời gọi
Python getattr() và setattr(), lời gọi thiết lập đơn giản lấy nhiều hơn một đối số hơn the get.

value = s.getsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, value)

Nhiều tuỳ chọn là cụ thể đối với hệ điều hành cụ thể và chúng có thể khó tính về các tuỳ chọn của
chúng được trình bày như thế nào. Sau đây là một vài tuỳ chọn phổ biến hơn:
+ SO_BROADCAST: Cái này cho phép broadcast UDP packets sẽ được gửi và nhận, cái tôi sẽ đề cập trong
học phần tiếp theo.
+ SO_DONTROUTE: Sẽ chỉ sẵn sàng gửi các gói dữ liệu cái được đánh địa chỉ tới các hosts trên các subnets
tới nó máy tính này được nối trực tiếp. Laptop của tôi, ví dụ, tại thời điểm này sẽ sẵn sàng gửi các gói
dữ liệu tới các mạng 127.0.0.0/8 và 192.168.5.0/24 nếu tuỳ chọn socket này đã được thiết lập, nhưng nó
sẽ không sẵn sàng gửi chúng bất cứ đâu khác vì các gói dữ liệu sau đó sẽ phải định tuyến qua một gatewway.
+ SO_TYPE: khi được truyền tới getsockopt(), cái này trả về cho bạn bất kể một socket có thuộc dạng SOCK_DGRAM
và có thể được sử dụng cho UDP hay bất kể nó có là thuộc dạng SOCK_STREAM và thay vì hỗ trợ semantics của TCP.
Học phần tiếp theo sẽ giới thiệu một vài tuỳ chọn socket xa hơn cái áp dụng cụ thể cho các TCP sockets.

Chia sẻ