JavaTM Platform
Standard Ed. 6

java.net
인터페이스 SocketOptions

기존의 구현 클래스의 일람:
DatagramSocketImpl , SocketImpl


public interface SocketOptions

소켓 옵션을 취득/설정하는 메소드의 인터페이스. 이 인터페이스는 SocketImplDatagramSocketImpl 에 의해 구현되고 있습니다. 이러한 서브 클래스에서 독자적인 옵션을 지원하려면 , 이 인터페이스의 메소드를 오버라이드(override) 해 주세요.  

이 인터페이스내의, 옵션을 지정하기 위한 메소드와 정수는, 구현 전용입니다. SocketImpl 또는 DatagramSocketImpl 의 서브 클래스를 작성하지 않는 경우에는, 이것들을 직접 사용하지 말아 주세요. Socket, ServerSocket, DatagramSocket, 및 MulticastSocket 에는, 이러한 각 옵션을 취득/설정하기 위한 형 보증된 메소드가 존재하고 있습니다.  


필드의 개요
static int IP_MULTICAST_IF
          멀티 캐스트 패킷을 송신하는 송출 인터페이스를 어느 것으로 하는지 설정합니다.
static int IP_MULTICAST_IF2
          상기와 같습니다.
static int IP_MULTICAST_LOOP
          이 옵션은, 멀티 캐스트 데이터 그램의 로컬 루프백을 유효 또는 무효로 합니다.
static int IP_TOS
          이 옵션은, TCP 또는 UDP 소켓의 IP 헤더의 서비스의 형태 또는 트래픽 클래스 필드를 설정합니다.
static int SO_BINDADDR
          소켓의 로컬 주소에의 바인드를 가져옵니다.
static int SO_BROADCAST
          소켓의 SO_BROADCAST 를 설정합니다.
static int SO_KEEPALIVE
          TCP 소켓으로 킵얼라이브 옵션이 설정되어 있어, 2 시간 (주: 실제의 값은 구현에 의존한다)의 사이, 그 소켓 경유로 어느 쪽의 방향에도 데이터가 교환되지 않았던 경우, TCP 는 자동적으로, 킵얼라이브 프로브를 피어에 송신합니다.
static int SO_LINGER
          linger-on-close 타임 아웃을 지정합니다.
static int SO_OOBINLINE
          OOBINLINE 옵션이 설정되었을 경우, 그 소켓상에서 수신되는 TCP 긴급 데이터는 모두, 그 소켓의 입력 스트림 경유로 수신됩니다.
static int SO_RCVBUF
          플랫폼이 수신시의 네트워크 입출력용으로서 사용하는 버퍼의 사이즈의 힌트를 설정합니다.
static int SO_REUSEADDR
          소켓의 SO_REUSEADDR 를 설정합니다.
static int SO_SNDBUF
          플랫폼이 송신시의 네트워크 입출력용으로서 사용하는 버퍼의 사이즈의 힌트를 설정합니다.
static int SO_TIMEOUT
          소켓 조작의 블록에 타임 아웃을 설정합니다.
static int TCP_NODELAY
          이 접속으로 Nagle 의 알고리즘을 무효로 합니다.
 
메소드의 개요
 Object getOption (int optID)
          옵션의 값을 가져옵니다.
 void setOption (int optID, Object  value)
          optID 로 지정된 옵션을 유효 또는 무효로 합니다.
 

필드의 상세

TCP_NODELAY

static final int TCP_NODELAY
이 접속으로 Nagle 의 알고리즘을 무효로 합니다. 네트워크에 기입해진 데이터는, 이전에 기입해진 데이터가 확인될 때까지 버퍼내에 포함되지 않습니다.

TCP 인 만큼 유효: SocketImpl.  

관련 항목:
Socket.setTcpNoDelay(boolean) , Socket.getTcpNoDelay() , 정수 필드치

SO_BINDADDR

static final int SO_BINDADDR
소켓의 로컬 주소에의 바인드를 가져옵니다. 이 옵션을 「설정」할 수 없습니다. 실시할 수 있는 것은 「취득」뿐입니다. 왜냐하면, 소켓은 작성시에 바인드 되기 (위해)때문에, 로컬로 바인드 된 주소는 변경할 수 없기 때문입니다. 소켓의 디폴트의 로컬 주소는, INADDR_ANY 입니다. 이것은, multi-homed의 호스트상에 있는 임의의 로컬 주소를 의미합니다. multi-homed의 호스트는, 이 옵션을 사용하는 것으로, 복수의 주소의 1 개만으로 접속을 받아들이거나 (ServerSocket 또는 DatagramSocket 의 경우), 피어에의 리턴 주소를 지정하거나 (Socket 또는 DatagramSocket 의 경우) 할 수 있습니다. 이 옵션의 파라미터는, InetAddress 입니다.  

이 옵션은, 생성자 중(안)에서지정되지 않으면 안됩니다.  

유효: SocketImpl, DatagramSocketImpl  

관련 항목:
Socket.getLocalAddress() , DatagramSocket.getLocalAddress() , 정수 필드치

SO_REUSEADDR

static final int SO_REUSEADDR
소켓의 SO_REUSEADDR 를 설정합니다. 이것은, java 에서는 MulticastSocket 전용이며, MulticastSocket 에서는 디폴트로 설정됩니다.  

유효: DatagramSocketImpl

관련 항목:
정수 필드치

SO_BROADCAST

static final int SO_BROADCAST
소켓의 SO_BROADCAST 를 설정합니다. 이 옵션은, 브로드캐스트 메세지를 송신하는 기능을 유효 또는 무효로 합니다. 이것이 지원되는 것은, Ethernet 나 토큰링이라고 하는 브로드캐스트 메세지의 개념을 지원하는 네트워크상의 데이터 그램 소켓에 대해서 뿐입니다. DatagramSocket 에서는 이것이 디폴트로 설정됩니다.

도입된 버젼:
1.4
관련 항목:
정수 필드치

IP_MULTICAST_IF

static final int IP_MULTICAST_IF
멀티 캐스트 패킷을 송신하는 송출 인터페이스를 어느 것으로 하는지 설정합니다. 복수의 네트워크 인터페이스를 가지는 호스트상에서, 어플리케이션이 시스템의 디폴트 이외를 사용할 필요가 있는 경우에 도움이 됩니다. InetAddress 를 취득하거나 돌려주거나 합니다.  

멀티 캐스트에 유효: DatagramSocketImpl  

관련 항목:
MulticastSocket.setInterface(InetAddress) , MulticastSocket.getInterface() , 정수 필드치

IP_MULTICAST_IF2

static final int IP_MULTICAST_IF2
상기와 같습니다. 이 옵션의 도입 목적은, IP_MULTICAST_IF 의 동작은 이전과 같게 유지하면서, IPv4 주소, IPv6 주소의 어느 쪽인가에 밤송출 인터페이스의 설정을 이 새로운 옵션으로 지원할 수 있도록(듯이) 하는 것입니다. 주:이것과의 충돌이 발생하지 않게 주의해 주세요

도입된 버젼:
1.4
관련 항목:
MulticastSocket.setNetworkInterface(NetworkInterface) , MulticastSocket.getNetworkInterface() , 정수 필드치

IP_MULTICAST_LOOP

static final int IP_MULTICAST_LOOP
이 옵션은, 멀티 캐스트 데이터 그램의 로컬 루프백을 유효 또는 무효로 합니다. 멀티 캐스트 소켓에서는, 이 옵션이 디폴트로 유효하게 됩니다.

도입된 버젼:
1.4
관련 항목:
정수 필드치

IP_TOS

static final int IP_TOS
이 옵션은, TCP 또는 UDP 소켓의 IP 헤더의 서비스의 형태 또는 트래픽 클래스 필드를 설정합니다.

도입된 버젼:
1.4
관련 항목:
정수 필드치

SO_LINGER

static final int SO_LINGER
linger-on-close 타임 아웃을 지정합니다. 이 옵션은, TCP 소켓의 close() 로부터의 즉시 리턴을 무효 또는 유효하게 합니다. 0 이외의 정수의 「타임 아웃」을 사용해 이 옵션을 유효하게 했을 경우, 피어에 기입해진 모든 데이터의 송신과 확인이 완료할 때까지 close() 가 블록 됩니다. 그리고, 그것들이 완료한 시점에서 소켓은 「정상적으로」클로즈 됩니다. 지연 타임 아웃에 이르면(자), 소켓은 TCP RST 로 「강제적으로」클로즈 됩니다. 0 의 타임 아웃으로 이 옵션을 유효하게 했을 경우, 곧바로 강제 클로즈가 실행됩니다. 지정된 타임 아웃치가 65,535 를 넘고 있는 경우, 그 값은 65,535 로 줄여집니다.  

TCP 에만 유효: SocketImpl

관련 항목:
Socket.setSoLinger(boolean, int) , Socket.getSoLinger() , 정수 필드치

SO_TIMEOUT

static final int SO_TIMEOUT
소켓 조작의 블록에 타임 아웃을 설정합니다.
ServerSocket.accept();
SocketInputStream.read();
DatagramSocket.receive();
 

이 옵션은, 블록 처리에 들어가기 전으로 설정해 주세요. 그렇게 하지 않으면 효과가 없습니다. 타임 아웃의 기한이 지나도 조작의 블록이 계속하고 있는 경우,java.io.InterruptedIOException 가 발행됩니다. 이 경우, 소켓은 클로즈 되지 않습니다.

모든 소켓으로 유효: SocketImpl, DatagramSocketImpl

관련 항목:
Socket.setSoTimeout(int) , ServerSocket.setSoTimeout(int) , DatagramSocket.setSoTimeout(int) , 정수 필드치

SO_SNDBUF

static final int SO_SNDBUF
플랫폼이 송신시의 네트워크 입출력용으로서 사용하는 버퍼의 사이즈의 힌트를 설정합니다. 설정시에 사용되었을 경우, 이것은, 소켓 경유로 송신하는 데이터용의 버퍼의 사이즈에 관한, 어플리케이션으로부터 커넬에의 추천값가 됩니다. 취득시에 사용되었을 경우, 이것은, 이 소켓상에서의 데이터 송신시에 플랫폼이 실제로 사용하는 버퍼의 사이즈가 돌려주어집니다. 모든 소켓으로 유효: SocketImpl, DatagramSocketImpl

관련 항목:
Socket.setSendBufferSize(int) , Socket.getSendBufferSize() , DatagramSocket.setSendBufferSize(int) , DatagramSocket.getSendBufferSize() , 정수 필드치

SO_RCVBUF

static final int SO_RCVBUF
플랫폼이 수신시의 네트워크 입출력용으로서 사용하는 버퍼의 사이즈의 힌트를 설정합니다. 설정시에 사용되었을 경우, 이것은, 소켓 경유로 수신하는 데이터용의 버퍼의 사이즈에 관한, 어플리케이션으로부터 커넬에의 추천값가 됩니다. 취득시에 사용되었을 경우, 이것은, 이 소켓상에서의 데이터 수신시에 플랫폼이 실제로 사용하는 버퍼의 사이즈가 돌려주어집니다. 모든 소켓으로 유효: SocketImpl, DatagramSocketImpl

관련 항목:
Socket.setReceiveBufferSize(int) , Socket.getReceiveBufferSize() , DatagramSocket.setReceiveBufferSize(int) , DatagramSocket.getReceiveBufferSize() , 정수 필드치

SO_KEEPALIVE

static final int SO_KEEPALIVE
TCP 소켓으로 킵얼라이브 옵션이 설정되어 있어, 2 시간 (주: 실제의 값은 구현에 의존한다)의 사이, 그 소켓 경유로 어느 쪽의 방향에도 데이터가 교환되지 않았던 경우, TCP 는 자동적으로, 킵얼라이브 프로브를 피어에 송신합니다. 이 프로브는, 피어가 응답하지 않으면 안 되는 TCP 세그먼트(segment)입니다. 예상되는 응답은, 다음의 3 개중 머지않아인가입니다. 1. 피어는 예상되는 ACK 로 응답한다. 어플리케이션에는 통지되지 않는다 (아무것도 문제가 없기 때문에). 그 후, 비활동 상태가 2 시간 계속되면(자), TCP 는 재차 프로브를 송신한다. 2. 피어가 RST 로 응답한다. 이것은, 피어의 호스트가 크래쉬 해, 리부트한 것을 로컬 TCP 에게 전하는 역할을 완수한다. 소켓은 클로즈 된다. 3. 피어로부터의 응답이 없다. 소켓은 클로즈 된다. 이 옵션의 목적은, 피어 호스트가 크래쉬 했을 경우에 검출하는 것입니다. TCP 소켓에만 유효: SocketImpl

관련 항목:
Socket.setKeepAlive(boolean) , Socket.getKeepAlive() , 정수 필드치

SO_OOBINLINE

static final int SO_OOBINLINE
OOBINLINE 옵션이 설정되었을 경우, 그 소켓상에서 수신되는 TCP 긴급 데이터는 모두, 그 소켓의 입력 스트림 경유로 수신됩니다. 이 옵션이 무효가 되어 있는 경우 (그것이 디폴트), 긴급 데이터는 아무 통지도 없게 파기됩니다.

관련 항목:
Socket.setOOBInline(boolean) , Socket.getOOBInline() , 정수 필드치
메소드의 상세

setOption

void setOption(int optID,
               Object  value)
               throws SocketException 
optID 로 지정된 옵션을 유효 또는 무효로 합니다. 유효하게 해야 할 옵션이 옵션에 고유의 「값」을 받는 경우, 그 값을 value 로 지정합니다. 값의 실제의 형태는 옵션에 고유하고, 기대되는 형태가 아닌 값을 건네주면(자) 에러가 됩니다.
SocketImpl s;
 ...
s.setOption(SO_LINGER, new Integer(10));
// OK - set SO_LINGER w/ timeout of 10 sec.
s.setOption(SO_LINGER, new Double(10));
// ERROR - expects java.lang.Integer
요구되는 옵션이 바이너리치의 경우는, java.lang.Boolean 에 의한 다음의 메소드를 사용해 설정할 수 있습니다.
s.setOption(TCP_NODELAY, new Boolean(true));
// OK - enables TCP_NODELAY, a binary option
 

Boolean(false)와 함께 이 메소드를 사용하면(자), 임의의 옵션을 무효로 할 수 있습니다.
s.setOption(TCP_NODELAY, new Boolean(false));
// OK - disables TCP_NODELAY
s.setOption(SO_LINGER, new Boolean(false));
// OK - disables SO_LINGER
 

온/오프의 개념이 있어, boolean 형이 아닌 파라미터를 필요로 하는 옵션의 경우는, 이 값을 Boolean(false) 이외에 설정하면(자), 그 옵션이 암묵중에 유효하게 됩니다.
옵션이 인식되지 않는 경우, 소켓이 닫혀지고 있는 경우, 혹은 하등의 저레벨의 에러가 발생했을 경우에는, SocketException 가 throw 됩니다.

파라미터:
optID - 옵션의 ID (식별자)
value - 소켓의 옵션의 파라미터
예외:
SocketException - 옵션이 인식되지 않는 경우, 소켓이 닫혀지고 있는 경우, 혹은 하등의 저레벨의 에러가 발생했을 경우
관련 항목:
getOption(int)

getOption

Object  getOption(int optID)
                 throws SocketException 
옵션의 값을 가져옵니다. 바이너리치의 옵션은, 유효하면 java.lang.Boolean(true)를 돌려주어, 무효이면 java.lang.Boolean(false)를 돌려줍니다. 다음에 예를 나타냅니다.
SocketImpl s;
 ...
Boolean noDelay = (Boolean)(s.getOption(TCP_NODELAY));
if (noDelay.booleanValue()) {
// true if TCP_NODELAY is enabled...
 ...
 }
 

특정의 형태를 파라미터로서 취하는 옵션에 대해서는, getOption(int)는 파라미터의 값을 돌려줍니다. 그렇지 않은 경우는, java.lang.Boolean(false)가 돌려주어집니다.

Object o = s.getOption(SO_LINGER);
if (o instanceof Integer) {
System.out.print("Linger time is " + ((Integer) o). intValue());
} else {
// the true type of o is java.lang.Boolean(false);
 }
 

파라미터:
optID - 취득하는 옵션을 지정한 int
반환값:
옵션의 값
예외:
SocketException - 소켓이 닫혀지고 있는 경우
SocketException - optID 가 프로토콜 스택 (SocketImpl 를 포함한다)에 근거해 미지인 경우
관련 항목:
setOption(int, java.lang.Object)

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.