2006-04-12

ソケットでコネクションが切断されたら

メモ。ソケット接続においてクライアントからconnectで切断した後でサーバ側から切断されると、

  • sendは一回目はエラーを返さない。二回目でEPIPEを返し、SIGPIPEが発生。
  • recvはエラーを返さない。受信サイズが0だったら切断されたと見做してよい。
  • タイムアウトとかするわけではない。

らしい。

recvを期待している受信サイズになるまでループしてたから、無限ループに陥ってCPU100%使ってたぜ。(ぉ

参考: Programming UNIX Sockets in C - Frequently Asked Questions

Tags: C

NHK受信料支払い義務化

ついに強制回収。
Tags: TV
本日のツッコミ(全2件) [ツッコミを入れる]
A木 (2006-04-13 01:30)

俺もそれ、3年ぐらい前に嵌りまくって苦労したよ。SIGPIPEってのがポイントだな。ヘンなライブラリだと、SIGPIPEが上がらなくなっているものもあって、これがまた曲者。

☆な (2006-04-13 12:10)

sendでMSG_NOSIGNAL指定してEPIPEで判定するようにしちゃいましたけど、SIGPIPE上がらないのもあるんですか。ほぇ〜


«前の日記(2006-04-11) 最新 次の日記(2006-04-13)»

2006年
4月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30