タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

networkとsocketに関するwakaranyのブックマーク (2)

  • Big Sky :: select(2)の第一引数にディスクリプタの最大値を渡すのは間違い?

    追記 POSIX では明確にソケットの最大値とはうたってはいないものの、Linux の実装を見ても最大値と扱う方が良い様です。また Winsock では select(2) の第一引数は無視されるようです。 C言語でソケットを使うプログラミングを行う際、ソケットディスクリプタがシグナル状態かを調べる方法としてselect(2)があります。 使い方は int r; fd_set rfds; FD_ZERO(&rfds); FD_SET(sock, &rfds); r = select(1, &rfds, NULL, NULL, NULL); といった感じ。ここでselect(2)の第一引数に渡している値は、ディスクリプタ集合rfdsの内、いくつ検証するかを指す値。つまりrfdsに対してFD_ZERO/FD_CLRしてからFD_SETした回数となります。 ちなみに戻り値は、ディスクリプタ集合の

    Big Sky :: select(2)の第一引数にディスクリプタの最大値を渡すのは間違い?
  • Socket FAQ

    【質問】 たまに、受信したレコードの最後が途中で切れていることがあります。どうしてでしょうか? 【回答】 SNA であればフレーム単位の伝送なのでこのようなことは起こりませんが、TCPIP はバイト単位で伝送を行います。 そのため、伝送中にレコードが複数のパケットに分割され、受信したバッファーにレコードの途中までしか入っていない事が あります。 つまり、400 バイトのレコードを send() し、400 バイトの Buffer 長を指定して recv() を行ったとしても、1回の recv() で、400 バイト全てのデータがとれる保証はありません。 800 バイトの Buffer 長を指定して recv() を行うと、2回分のレコードが1回の recv() で受信できるかもしれません。 固定長データの送受信ならば、受信したあとに足りないバイト数分の recv() を再度実行するようにコ

  • 1