JavaTM 2 Platform
Standard Ed. 6

java.net
介面 SocketOptions

所有已知實作類別:
DatagramSocketImpl, SocketImpl

public interface SocketOptions

獲取/設置Socket選項的方法的介面。此介面由 SocketImplDatagramSocketImpl 實作。它們的子類別應該覆寫此介面的方法來支持它們自己的選項。

在此介面中指定選項的方法和常數僅用於實作目的。如果不為 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 Socket在 IP 位址頭中設置服務型別或串流量類別欄位。
static int SO_BINDADDR
          獲取綁定Socket的本地位址(不能僅將此選項“設置”為“得到”,因為Socket是在創建時綁定的,所以本地綁定的位址不可更改)。
static int SO_BROADCAST
          為Socket設置 SO_BROADCAST。
static int SO_KEEPALIVE
          為 TCP Socket設置 keepalive 選項時,如果在 2 個小時(註:實際值與實作有關)內在任意方向上都沒有跨越Socket交換資料,則 TCP 會自動將 keepalive 探頭發送到同位體。
static int SO_LINGER
          指定關閉時逗留的逾時值。
static int SO_OOBINLINE
          設置 OOBINLINE 選項時,在Socket上接收的所有 TCP 緊急資料都將通過Socket輸入串流接收。
static int SO_RCVBUF
          設置傳入網路 I/O 的平臺所使用基礎緩衝區的大小的提示。
static int SO_REUSEADDR
          設置Socket的 SO_REUSEADDR。
static int SO_SNDBUF
          設置傳出網路 I/O 的平臺所使用的基礎緩衝區大小的提示。
static int SO_TIMEOUT
          設置阻塞 Socket 操作的逾時值: ServerSocket.accept(); SocketInputStream.read(); DatagramSocket.receive(); 選項必須在進入阻塞操作前設置才能生效。
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
獲取綁定Socket的本地位址(不能僅將此選項“設置”為“得到”,因為Socket是在創建時綁定的,所以本地綁定的位址不可更改)。Socket的預設本地位址為 INADDR_ANY,表示多宿主機 (multi-homed host) 上的任何本地位址。多宿主機可以使用此選項接受僅到其位址的連接(在使用 ServerSocket 或 DatagramSocket 的情況下),或者將其返回位址指定到同位體(對於 Socket 或 DatagramSocket)。此選項的參數為 InetAddress。

此選項必須在建構子中指定。

對 SocketImpl、DatagramSocketImpl 有效。

另請參見:
Socket.getLocalAddress(), DatagramSocket.getLocalAddress(), 常數欄位值

SO_REUSEADDR

static final int SO_REUSEADDR
設置Socket的 SO_REUSEADDR。在 java 中,它僅用於 MulticastSocket,預設情況下為 MulticastSocket 設置此選項。

對 DatagramSocketImpl 有效。

另請參見:
常數欄位值

SO_BROADCAST

static final int SO_BROADCAST
為Socket設置 SO_BROADCAST。此選項啟用和禁用發送廣播訊息的處理能力。它僅用於資料電報Socket和支持廣播訊息概念的網路上(例如,以太網、令牌網等),預設情況下為 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
此選項啟用或禁用多點傳送資料電報的本地回送。預設情況下,為 Multicast Socket 啟用此選項。

從以下版本開始:
1.4
另請參見:
常數欄位值

IP_TOS

static final int IP_TOS
此選項為 TCP 或 UDP Socket在 IP 位址頭中設置服務型別或串流量類別欄位。

從以下版本開始:
1.4
另請參見:
常數欄位值

SO_LINGER

static final int SO_LINGER
指定關閉時逗留的逾時值。此選項啟用/禁用從 TCP Socket 的 close() 立即返回。啟用具有非零 Integer 逾時值 的此選項意味著 close() 在傳輸和確認寫入到同位體的所有資料前將一直阻塞,在那時Socket將從容地 關閉。到達逗留逾時值時,Socket將通過 TCP RST 強制性 關閉。啟用逾時值為零的選項將立即強制關閉。如果指定的逾時值大於 65,535,則其將被減少到 65,535。

僅對 TCP(SocketImpl)有效。

另請參見:
Socket.setSoLinger(boolean, int), Socket.getSoLinger(), 常數欄位值

SO_TIMEOUT

static final int SO_TIMEOUT
設置阻塞 Socket 操作的逾時值:
 ServerSocket.accept();
 SocketInputStream.read();
 DatagramSocket.receive();
 

選項必須在進入阻塞操作前設置才能生效。如果超過逾時值,操作將繼續阻塞,將引發 java.io.InterruptedIOException。在此情況下,將不關閉 Socket。

對所有Socket(SocketImpl、DatagramSocketImpl)都有效。

另請參見:
Socket.setSoTimeout(int), ServerSocket.setSoTimeout(int), DatagramSocket.setSoTimeout(int), 常數欄位值

SO_SNDBUF

static final int SO_SNDBUF
設置傳出網路 I/O 的平臺所使用的基礎緩衝區大小的提示。在設置方法中使用時,這是一個對應用程序內核的建議,關於通過Socket發送資料時使用的緩衝區大小。在獲取方法中使用時,它必須返回在此Socket上發送資料時平臺實際使用的緩衝區大小。 對所有Socket(SocketImpl、DatagramSocketImpl)都有效。

另請參見:
Socket.setSendBufferSize(int), Socket.getSendBufferSize(), DatagramSocket.setSendBufferSize(int), DatagramSocket.getSendBufferSize(), 常數欄位值

SO_RCVBUF

static final int SO_RCVBUF
設置傳入網路 I/O 的平臺所使用基礎緩衝區的大小的提示。在設置方法中使用時,這是一個對應用程序內核的建議,關於通過Socket接收資料時使用的緩衝區大小。在獲取方法中使用時,它必須返回在此Socket上接收資料時平臺實際使用的緩衝區大小。 對所有Socket(SocketImpl、DatagramSocketImpl)都有效。

另請參見:
Socket.setReceiveBufferSize(int), Socket.getReceiveBufferSize(), DatagramSocket.setReceiveBufferSize(int), DatagramSocket.getReceiveBufferSize(), 常數欄位值

SO_KEEPALIVE

static final int SO_KEEPALIVE
為 TCP Socket設置 keepalive 選項時,如果在 2 個小時(註:實際值與實作有關)內在任意方向上都沒有跨越Socket交換資料,則 TCP 會自動將 keepalive 探頭發送到同位體。此探頭是同位體必須回應的 TCP 段。期望的回應為以下三種之一:1. 同位體通過期望的 ACK 回應。不通知應用程序(因為一切正常)。在另一個 2 小時的不活動時間過後,TCP 將發送另一個探頭。2. 同位體通過 RST 回應,通知本地 TCP 同位體主機已崩潰並重新啟動。Socket被關閉。3. 同位體沒有回應。Socket被關閉。 此選項的目的是檢測同位體主機是否崩潰。 僅對 TCP Socket(SocketImpl)有效。

另請參見:
Socket.setKeepAlive(boolean), Socket.getKeepAlive(), 常數欄位值

SO_OOBINLINE

static final int SO_OOBINLINE
設置 OOBINLINE 選項時,在Socket上接收的所有 TCP 緊急資料都將通過Socket輸入串流接收。禁用該選項時(預設),將悄悄丟棄緊急資料。

另請參見:
Socket.setOOBInline(boolean), Socket.getOOBInline(), 常數欄位值
方法詳細資訊

setOption

void setOption(int optID,
               Object value)
               throws SocketException
啟用/禁用 optID 指定的選項。如果將啟用選項,並且它採用選定於選項的 "value",則將其傳入 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) 之外的任何內容都會隱式地啟用該選項。
如果未識別選項、Socket被關閉或者發生某種低層級別的錯誤,則拋出 SocketException

參數:
optID - 標識選項
value - Socket選項的參數
拋出:
SocketException - 如果未識別選項、Socket被關閉或者發生某種低層級別的錯誤
另請參見:
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 - 如果Socket被關閉
SocketException - 如果 optID 根據協議堆疊(stack)空間(包括 SocketImpl)是未知的
另請參見:
setOption(int, java.lang.Object)

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only