Đọc tám byte, rồi bàn giao đường hầm SOCKS4
Tránh nuốt lời chào của đích đến hoặc chờ những byte không tồn tại bằng cách phân tích ranh giới cố định của phản hồi SOCKS4.
Yêu cầu kết nối SOCKS4 thành công, nhưng ứng dụng không bao giờ thấy lời chào mở đầu của máy chủ. Một chỗ cần xem là lần đọc đầu tiên của bộ kết nối. Một lần đọc mười sáu byte là quá lớn cho phản hồi SOCKS4 tám byte.
| Trường phản hồi | Byte |
|---|---|
| Trường phiên bản phản hồi | 1 |
| Mã kết quả | 1 |
| Trường cổng | 2 |
| Trường địa chỉ | 4 |
Mã kết quả 0x5a cho biết yêu cầu đã được chấp thuận. SOCKS4a thay đổi cách yêu cầu mang tên máy chủ; nó không biến phản hồi thành mười sáu byte.
Sau phản hồi, cùng luồng TCP đó mang giao thức của đích đến. Một máy chủ thư có thể gửi lời chào ngay lập tức. Vì vậy, một lần đọc tiêu thụ mười sáu byte sẵn có có thể lấy luôn toàn bộ phản hồi proxy cộng tám byte đầu của lời chào đó. Nếu chưa có gì tiếp theo, một lần đọc chặn quá lớn lại có thể thêm một khoảng chờ không cần thiết.
Độ dài chính xác là trách nhiệm của bộ phân tích
Yêu cầu tám byte một lần không đủ chứng minh rằng tám byte đã đến. Các lần đọc luồng có thể trả về ít hơn. Thu đúng độ dài của phản hồi trong một thời hạn, dừng khi luồng đóng hoặc lỗi, kiểm tra phản hồi và để các byte tiếp theo cho ứng dụng.
Nếu bộ kết nối dùng lần đọc có bộ đệm lớn hơn, hãy giữ lại mọi thứ sau ranh giới và chuyển cho bên tiêu thụ tiếp theo. Bỏ phần dư là cùng một mất mát dữ liệu với kích thước đọc khác.
SOCKS5 cần bộ phân tích riêng. Độ dài địa chỉ trong phản hồi của nó có thể khác nhau theo loại địa chỉ. Thay mọi lần đọc proxy bằng một lần đọc cố định tám byte sẽ sửa một giao thức trong khi làm hỏng giao thức khác.