4.4.7 关闭后停留

当调用套接字的close()方法后,即使套接字的缓冲区中还有没有发送的数据,它也将立即返回。这样不发送完所有数据可能导致的问题是主机将在后面的某个时刻发生故障。其实可以选择让close()方法“停留”或阻塞一段时间,直到所有数据都已经发送并确认,或发生了超时。详情见第6.4.2节。

Socket:在close()方法停留

figure_0112_0138

如果调用setSoLinger()并将其设置为true,那么后面再调用的close()方法将阻塞等待,直到远程终端对所有数据都返回了确认信息,或者发生了指定的超时(秒)。如果发生了超时,TCP连接将强行关闭。如果开启了停留功能,getSoLinger()方法将返回指定的超时时间,否则返回-1。