68user's page 掲示板

Prev< No. 3155> Next  [最新発言に戻る] [過去ログ一覧]
No. 3155 # 68user 2003/03/24 (月) 23:23:30
>>3154 kaki
> この方法は正攻法なのでしょうか?
正攻法とは何かという話になってしまいますが、TCP/IP の設計思想的には
誤りです。ケーブルが抜けようがルータが落ちようが、その部分が復旧したら
元通りに通信できるべきである、という考えだからです。

と言っても、タイムアウトを実装したいというケースもあるでしょうが、
わたしなら select したり non-blocking socket 使うと思います。ケーブル
断だけでなく、クライアント側のバグなどで いつまでたっても反応がない
場合なども対応できるからです。

サーバ側のケーブル断であれば
>>1301 rosegarden
という話もあったりしますが、通信できない原因はたくさん考えられるのに、
なぜサーバ側のケーブル断だけ特別扱いするのか、という話になるのではないかと。

> 受信待ちをしないよう、socket()後にfcntl(s,F_SETFL,O_NONBLOCK)と
> しているのですがrecv()でとまっているようです。
> fcntl()の使い方が間違っているのでしょうか?
non-blocking socket を使ったことがないのでわかりませんが、あってる
ような気がします。

多分これは関係ないでしょうけど、とりあえず
      int val = fcntl(s, F_GETFL, 0);
      fcntl(s, F_SETFL, val | O_NONBLOCK);
の方がいいでしょうね。

Prev< No. 3155> Next  [最新発言に戻る] [過去ログ一覧]