сканировать сеть (maxpatrol, nessus - удобно, но платно или например бесплатным nmap) - можно определить какая ОС установлена (винда на свои стандартные порты отвечает например)
собирать трафик на одном узле и сравнивать TTL, у каждой ОС по умолчанию разные TTL (например у винды 128, у линухов - 64, у циски - 255)
Описание говорит, что мол "функция bind нужна для привязки локального адреса к сокету".
Кхм. А зачем?
Есть комп, у компа есть адрес. Почему стек не может как-то сам привязать известный ему адрес к сокету?
Потому "адрес" -- это не только IP адрес, но и порт (TCP и UDP), или путь в файловой системе (UNIX domain sockets) или что угодно ещё для других протоколов.