קידוד פורטי SOCKS5 ב-Go כשני בתים big-endian
השתמשו בעוזרי binary.BigEndian של Go לשדות פורט SOCKS5 במקום לחתוך מחרוזת בינארית באורך משתנה.
שדות פורט SOCKS5 הם שני בתים ללא סימן בסדר בתי הרשת: הבית המשמעותי ביותר בא ראשון. ב-Go, קדדו uint16 שכבר עבר ולידציה ישירות:
var field [2]byte
binary.BigEndian.PutUint16(field[:], port)ייבאו encoding/binary. עבור פורט 1080, הבתים ההקסדצימליים המתקבלים הם 04 38. עבור פורט 4, הם 00 04; האפס המוביל הוא חלק מהשדה ברוחב קבוע.
אם הקלט מתחיל כמספר שלם גדול יותר או כמחרוזת, אמתו את הטווח המספרי שלו לפני ההמרה ל-uint16. ההמרה עלולה להשליך את הביטים הגבוהים במקום לדווח על ערך מחוץ לטווח.
בתגובת SOCKS5, סדרו את BND.PORT, שדה הפורט המקושר של השרת. אל תעתיקו את פורט היעד המבוקש לשדה הזה רק משום ששניהם תופסים שני בתים. הציבו את השדה המקודד אחרי כתובת התגובה, שאורכה תלוי ב-ATYP.