java socket参数详解:SoLinger

来源:互联网 发布:梁朝伟唱功 知乎 编辑:程序博客网 时间:2024/06/07 19:37
启用/禁用具有指定逗留时间(以秒为单位)的 SO_LINGER。最大超时值是特定于平台的。 该设置仅影响套接字关闭。默认值为-1,表示禁用。
这个
Socket选项可以影响close方法的行为。在默认情况下,当调用close方法后,将立即返回;如果这时仍然有未被送出的数据包,那么这些数据包将被丢弃。如果将linger参数设为一个正整数n时(n的值最大是65,535),在调用close方法后,将最多被阻塞n秒。在这n秒内,系统将尽量将未送出的数据包发送出去;如果超过了n秒,如果还有未发送的数据包,这些数据包将全部被丢弃;而close方法会立即返回。如果将linger设为0,和关闭SO_LINGER选项的作用是一样的。
[java] view plain copy
 print?
  1. package socket;  
  2.   
  3. import java.io.*;  
  4. import java.net.Socket;  
  5. import java.net.UnknownHostException;  
  6. import org.apache.log4j.Logger;  
  7.   
  8. public class Test_solinger {  
  9.     private static Logger logger = Logger.getLogger(Test_solinger.class);  
  10.   
  11.     public static void main(String[] args) {  
  12.         BufferedReader in = null;  
  13.         PrintWriter out = null;  
  14.         try {  
  15.             String ip = "127.0.0.1";  
  16.             Socket socket = new Socket(ip, 10000);  
  17.             in = new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  18.             out = new PrintWriter(socket.getOutputStream());  
  19.             logger.debug(socket.getSoLinger());  
  20.               
  21.             /** 
  22.              * 这里调用了socket.close()返回时,hello和world未必已经成功发送到对方了,如果我们设置了linger而不小于0,那么close会等到发送的数据已经确认了才返回。 
  23.              * 但是如果对方宕机,超时,那么会根据linger设定的时间返回。 
  24.              * 有了后面三句,socket关闭后, 服务端也会收到信息 
  25.              */   
  26.             boolean on = true;  
  27.             int linger = 100;  
  28.             socket.setSoLinger(on, linger);  
  29.   
  30.             String head = "hello ";  
  31.             String body = "world\r\n";  
  32.             out.write(head);  
  33.             out.write(body);  
  34.             socket.close();  
  35.         } catch (UnknownHostException e) {  
  36.             e.printStackTrace();  
  37.         } catch (IOException e) {  
  38.             e.printStackTrace();  
  39.         }  
  40.     }  
  41. }  
0 0
原创粉丝点击