- A端關(guān)閉socket,B端連續(xù)send
第一次send成功返回,errno = 0。第二次直接觸發(fā)SIGPIPE,進(jìn)程退出,不會(huì)有send退出的流程 - B端先send一次,A端關(guān)閉socket,B端再連續(xù)send
連續(xù)send的第一次send返回-1,errno = 104,代表ECONNRESET。第二次觸發(fā)SIGPIPE,進(jìn)程退出,不會(huì)有send退出的流程 - B端連續(xù)send,A端待B端阻塞后關(guān)閉socket
首先send從阻塞中返回,errno = 0,但返回值應(yīng)該小于要寫入的長(zhǎng)度。比如要寫1024個(gè)字節(jié),但只返回960個(gè)字節(jié)(個(gè)人理解:緩沖區(qū)剩下多少可寫就返回多少)。下一次send返回-1,errno = 104,代表ECONNRESET。再下一次觸發(fā)SIGPIPE,進(jìn)程退出。
綜上:在不忽略SIGPIPE的情況下,靠判斷send的返回值來判斷是否出錯(cuò)是不可行的。原因就是如果A端先關(guān)閉socket,B端send第一次成功返回,第二次就會(huì)直接退出。