Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Опции сокета в Java

Путь C

Программируя в C, каждый устанавливает опции при использовании системного вызова вроде:
        setsockopt(int fd, int level, int optval, void *optdata, 
                   int optdatalen);

        fd = already opened (possibly connected) socket fd;
        level = level in the protocol stack (IP, UDP, TCP) where
                the option applies;
        optval = the option, a CONSTANT;
        optdata = ptr to option dependent struct of parameters relevant
                 only to a particular option;

В java

Способ C установить опции испытывает недостаток в безопасности типов объектно-ориентированного программирования. Опция, которую каждый хочет установить/получить, идентифицируется интервалом, и значение, чтобы установить/войти является непрозрачным void*. Слишком легко передать неправильный идентификатор опции, неправильный объект типа в void* параметре, или несправедливость для того параметра. Хуже все еще, код для этих ошибок будет обычно компилировать, и ошибка будет только проявлена во времени выполнения.

Java теперь обеспечивает безопасный с точки зрения типов способ установить опции. У каждого class сокета есть получить/установить метод для каждой опции, которую он поддерживает, беря и возвращая соответствующий тип., Поддерживаемые опции те, для который классы сокета и их значение вкратце:

Оказался нереален...

Некоторые возможные опции BSD, которые не поддерживаются в java:

Реализация детализирует...

... то, что Вы не должны знать, если Вы не разделяете SocketImpl/DatagramSocketImpl на подклассы. У каждого объекта *Socket есть базовый SocketImpl/DatagramSocketImpl, который взаимодействует через интерфейс к собственному коду. Классы Impl реализуют два метода, чтобы поддерживать опции:
        void setOption(int optID, Object val) throws SocketException;
        Object getOption(int optID) throws SocketException;
это очень напоминает C. Эти методы действуют как связующее звено к собственным методам, и гарантируют безопасность типов прежде, чем собственные методы будут вызваны.


Oracle и/или его филиалы Авторское право © 1993, 2012, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами