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

java nio 的幾個(gè)點(diǎn)

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

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