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