SocketのInputStream、OutputStreamのタイムアウト値を個別に設定する方法


「SocketのInputStream、OutputStreamのタイムアウト値を個別に設定する方法」について、教えていただけないでしょうか。

サーバー側のソケットで、クライアントからの  
受信(InputStream)は無限に待ちつづけ、  
送信(OutputStream)のみタイムアウト値を設定することは可能でしょうか？  
Java1.4を利用して、以下のようにSocket接続をしているのですが、  
Socket#setSoTimeoutでタイムアウト値を指定すると、  
データの送受信がないときにソケットが閉じられてしまいます。  
入力処理は無限に待ち続け、出力処理のみタイムアウト値を設定することは可能でしょうか？

[code]

    ServerSocket serverSocket = new ServerSocket(0);
    Socket socket = serverSocket.accept();          // ブロッキングされる（クライアントからの通信開始要求が来るまで待機）
    socket.setSoTimeout(5 * 1000);              // タイムアウト値を５秒に設定
    
    InputStream inputStream = new BufferedInputStream(socket.getInputStream());
    OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream());
    
[/code]

追伸：  
ウェブサーバーのように(HTTP1.1のKeep-Aliveように)、  
クライアントからの受信を待ちつつ、こちらから送信できない相手は切断するといった仕組みは、  
どのように実装するべきでしょうか？




送信時エラーを検知して閉じたいのであれば、このようにすれば良いのではないでしょうか。

[code]

    try{
      outputStream.write(something);
    }catch(IOException e){
      closeSocket();
    }
    
    
[/code]

あるいは、相手側は一定時間おきに接続維持のための信号（HeartBeat的なもの）を送る、というプロトコルにしておいてsocketTimeoutの設定(setSoTimeout)によって、相手側がN/W的に死んだことを検知する、というのはいかがでしょうか。




送信時エラーを検知して閉じたいのであれば、このようにすれば良いのではないでしょうか。

[code]

    try{
      outputStream.write(something);
    }catch(IOException e){
      closeSocket();
    }
    
    
[/code]

あるいは、相手側は一定時間おきに接続維持のための信号（HeartBeat的なもの）を送る、というプロトコルにしておいてsocketTimeoutの設定(setSoTimeout)によって、相手側がN/W的に死んだことを検知する、というのはいかがでしょうか。

