socket程式的SIGPIPE問題 - Linux
By Yuri
at 2013-09-10T17:32
at 2013-09-10T17:32
Table of Contents
hi
請問各位
我的程式會不斷的發送資料給client端
使用的是TCP/IP連線
但是我實驗發現 如果client端未依正常程序結束(例如跳電,拔網路線)...等
server端大約過5~6秒就會卡住
所有資料都送不出去了 這時唯有結束server端程式重啟才行
查了一下google 有提到SIGPIPE 說是在send的過程中如果client端斷線或是RST
這時候系統會拋出一個SIGPIPE的signal
預設的處理方式是結束terminal 這當然不是我想要的
然後有說可以用
struct sigaction sa;
sa.sa_handler = SIG_IGN;
sigaction( SIGPIPE, &sa, 0 );
用signal的函式讓SIGPIPE交給SIG_IGN處理
然後有提到sigaction函式是使用一次就永久有效
如果用signal(SIGPIPE, SIG_IGN); 則是只有一次效果
但是經過我交叉測試 不管我怎麼設 只要我手動把client端網路關掉
大約經過5~6秒後 server端就一定會卡住 動彈不得
新資料送不出去 client連線也連不進來
請問我該怎麼處理比較好呢
理想狀態是如果SIGPIPE 我就把那個connection close掉
至少server端系統要持續進行 不能終止或是卡住
只是要先偵測到SIGPIPE 因為靠send函式的return值無法觀察出這個connection是否已經壞掉了
求助各為了 謝謝
--
Tags:
Linux
All Comments
By Ivy
at 2013-09-14T07:57
at 2013-09-14T07:57
By Margaret
at 2013-09-16T02:53
at 2013-09-16T02:53
By Gary
at 2013-09-16T18:55
at 2013-09-16T18:55
By Irma
at 2013-09-19T22:24
at 2013-09-19T22:24
By Rachel
at 2013-09-20T13:41
at 2013-09-20T13:41
By Andrew
at 2013-09-24T23:58
at 2013-09-24T23:58
By Catherine
at 2013-09-28T17:44
at 2013-09-28T17:44
By Kama
at 2013-09-30T02:13
at 2013-09-30T02:13
By Charlotte
at 2013-10-04T11:01
at 2013-10-04T11:01
By Blanche
at 2013-10-07T22:25
at 2013-10-07T22:25
By Wallis
at 2013-10-11T21:09
at 2013-10-11T21:09
By Caitlin
at 2013-10-15T15:18
at 2013-10-15T15:18
By Elma
at 2013-10-16T03:10
at 2013-10-16T03:10
By Heather
at 2013-10-17T23:55
at 2013-10-17T23:55
By David
at 2013-10-20T11:54
at 2013-10-20T11:54
By Hedda
at 2013-10-20T23:29
at 2013-10-20T23:29
Related Posts
網樂通 kernel 2.6.32.59 upgrade
By Adele
at 2013-09-09T16:27
at 2013-09-09T16:27
批次重新命名*.png to *2.png
By Hedy
at 2013-09-09T12:40
at 2013-09-09T12:40
HackingThursday 固定聚會 (2013-09-12)
By Kelly
at 2013-09-09T12:07
at 2013-09-09T12:07
程式只能執行一次的問題
By Cara
at 2013-09-09T10:45
at 2013-09-09T10:45
請問一下關於nginx gzip模組
By Delia
at 2013-09-09T00:01
at 2013-09-09T00:01