您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“linux下為什么會產生SIGPIPE”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“linux下為什么會產生SIGPIPE”這篇文章吧。
Brokenpipe:writetopipewithnoreaders.管道破裂。這個信號通常在進程間通信產生,比如采用FIFO(管道)通信的兩個進程,讀管道沒打開或者意外終止就往管道寫,寫進程會收到SIGPIPE信號。此外用Socket通信的兩個進程,寫進程在寫Socket的時候,讀進程已經終止。
SIGPIPE(Brokenpipe)含義
其他信號含義,參見:
linux信號類別/列表-概述
解決方法
忽略SIGPIPE信號
structsigactionsa;
sa.sa_handler=SIG_IGN;
sigaction(SIGPIPE,&sa,0);
調整socket發送函數的flags參數
設置flags為MSG_NOSIGNAL,實現整個進程(而非僅僅調用的線程)忽略SIGPIPE信號的效果.
ssize_tsend(intsockfd,constvoid*buf,size_tlen,intflags);
ssize_tsendto(intsockfd,constvoid*buf,size_tlen,intflags,\
conststructsockaddr*dest_addr,socklen_taddrlen);
ssize_tsendmsg(intsockfd,conststructmsghdr*msg,intflags);
sigpipe參數
參數flags,指示了send的傳輸數據的方式:
MSG_CONFIRM提供鏈路層反饋以保持地址映射有效
MSG_DONTROUTE勿將數據包路由出本地網絡
MSG_DONTWAIT允許非阻塞行為
MSG_EOF標記記錄結束
MSG_MORE允許延遲并寫更多數據
以上是“linux下為什么會產生SIGPIPE”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。