- A端關(guān)閉socket厂僧,B端連續(xù)send
第一次send成功返回鸟召,errno = 0胆绊。第二次直接觸發(fā)SIGPIPE,進(jìn)程退出欧募,不會有send退出的流程 - B端先send一次压状,A端關(guān)閉socket,B端再連續(xù)send
連續(xù)send的第一次send返回-1,errno = 104种冬,代表ECONNRESET镣丑。第二次觸發(fā)SIGPIPE,進(jìn)程退出娱两,不會有send退出的流程 - B端連續(xù)send莺匠,A端待B端阻塞后關(guān)閉socket
首先send從阻塞中返回,errno = 0十兢,但返回值應(yī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第一次成功返回讽营,第二次就會直接退出。