Опция SO_TYPE предназначена только для чтения. Она возвращает тип сокета, такой как SOCK_STREAM. Это значение должно быть распаковано с помощью формата “I” перед использованием.
И опция SO_ERR0R, предназначенная только для чтения, возвращает код ошибки возникшей во время последней операции с сокетом. Эта опция применяется для некоторых асинхронных операций, таких как неблокирующее подключение. Значение ошибки после его считывания очищается.
Опция сокета SO_REUSADDR. Во многих серверных приложениях должен быть активизирован флажок SO_REUSADDR. С помощью этого флажка можно повторно привязать к серверной программе адрес, который уже находится в использовании, что позволяет немедленно выполнить перезапуск сервера после его аварии или уничтожения. Без этой опции вызов функции bind() заканчивался бы неудачей до тех пор, пока все старые соединения не закроются по тайм-ауту; такой процесс может занять несколько минут. Для решения этой проблемы может быть вставлена следующая строка кода после вызова функции socket() и перед вызовом функции bind()
setsockopt: (SOCK, SOL_SOCKET, SO_REUSADDR, 1) or die "setsockopt: $!
Недостатком установки опции SO_REUSADDR является то, что она позволяет запустить сервер дважды. Оба процесса смогут выполнить привязку к одному и тому же адресу без активизации какой-либо ошибки, а затем будут конкурировать за входящие соединения, что может привести к нежелательным результатам. В серверах, которые будут разрабатываться позже, такая возможность исключается путем создания файла при запуске программы и удаления его перед завершением работы, Запуск сервера не выполняется, если обнаруживается, что такой файл уже существует. Операционная система не позволяет связывать с пользовательским процессом адрес сокета, уже связанного с другим пользовательским процессом, независимо от установки опции SO_REUSAPDR.