鍍金池/ 問答/Java  C++  Linux  網(wǎng)絡(luò)安全/ java nio 的幾個點

java nio 的幾個點

1、假如同步socketChannel.write(byte[])這個方法調(diào)用成功了,是表示對端一定能收到數(shù)據(jù)嗎?還是說只是寫到了本地的TCP 那個緩沖區(qū)里面?
2、還有一種是socketChannel是異步的情況下,如果我對端宕機了,我這端的select可以感知到read事件和write事件嗎?如果能的話,是哪個事件呢?原理是什么呢?
這幾個問題困擾我好久了,還望大牛給小弟指點迷津~~

回答
編輯回答
奧特蛋
  1. 如果是阻塞式的,那只能代表數(shù)據(jù)已發(fā)出去,但不能保證對方已收到;如果是非阻塞式的,select到OP_WRITE就說明數(shù)據(jù)已發(fā)出去;無論哪種方式似乎都無法確保對方收到,除非對方用數(shù)據(jù)來應(yīng)答;
  2. 對方宕機(或者拔網(wǎng)線),理論上我方是無法知道狀態(tài)的,如果對方進程被kill掉,那么操作系統(tǒng)可能會給回一個FINRST,你應(yīng)該會select到一個OP_READ,并在read時得到-1或異常。
2018年3月27日 00:26