トップページ⇒tech
956コメント340KB

ネットワークプログラミング相談室

■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。 NGNG
主にソケットに関してのFAQ
0762デフォルトの名無しさんNGNG
>>761
Rubyはクソです。ゴミ箱逝きです。

いじょ
この発言をコピペしていただければ幸いです。
0763デフォルトの名無しさんNGNG
>>761
http://www.google.com/search?hl=ja&q=telnet+RFC+%93%FA%96%7B%8C%EA%96%F3&lr=
0764761NGNG
>>763
あのさあ、検索しても見付からないからここで聞いてるんだけどさ。
0765デフォルトの名無しさんNGNG
今だ!765ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
0766765NGNG
Rubyはクソです。ゴミ箱逝きです。
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
0767765NGNG
sage忘れた。スマソ
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡=
         ̄ ̄  (´⌒(´⌒;;
0768デフォルトの名無しさんNGNG
>>764
これでどうだ!:-P
ttp://www.geocities.co.jp/HeartLand-Kaede/8800/rfc/rfc1097j.txt
0769デフォルトの名無しさんNGNG
質問した事があるのですが、質問した事を忘れてました。
敢えて何番の者かは申しませんが親切に答えてくれた方ありがとうございました。
0770デフォルトの名無しさんNGNG
>>768
おお!ありがとう。
しかしこれはサブリミナルオプションらしいですね。
telnetそのもののRFCの日本語訳を希望。
わがままいってごめんちょ
0771デフォルトの名無しさんNGNG
礼儀正しいんだか無礼なんだか…デモチョトワラタ。
…敢えて何番へのレスかは申しませんが…。
0772デフォルトの名無しさんNGNG
770がチョット可愛くみえた。(笑
0773デフォルトの名無しさんNGNG
              / ̄ ̄ ̄ ̄ ̄
     ,__     | >>770が>>768のjokeに気付きますように。
    /  ./\    \_____
  /  ./( ・ ).\       o〇       ヾ!;; . iii|//"
/_____/ .(´ー`) \   ∧∧   .       |;;; :.iii|/゙
 ̄|| || || ||. |っ¢..|| ̄   (,,  ) ナムナム   |;;; ,:iii|
  || || || ||./,,, |ゝ iii~   ⊂  ヾwwwjjrjww!;;;;:::iii|jwjjrjww〃
  | ̄ ̄ ̄|~~凸( ̄)凸 .(  ,,)〜 wjwjjrj从jwwjwjjrj从jr
0774デフォルトの名無しさんNGNG
以下のようにして、受信ループをまわしているのですが、
クライアント(IE6)が転送を中断してsocketが無効になったときに、
なぜか無限ループになってしまいます。
ちなみに、自分でtelnetを使用して実験した場合では再現しませんでした

このソケットをselect()で調べると、常に読み取り可能。
受信バイト数は16777215バイト。となっています。
無効時には-1が帰るものだと思っていたのですが、
sizeof(rbuf)よりも大きい数が帰ってきたらエラーとして扱うべきなのでしょうか?

char rbuf[4096];
while (len = recv(session, rbuf, sizeof(rbuf) - 1, 0)) {
  rbuf[len] = '\0';
  printf("%s", rbuf);
}
0775デフォルトの名無しさんNGNG
>>774
recv()が-1を返したときも、上のコードだとループは回り続けるけど、
if (len < 0) {...} みたいなコードは省略済み?
ちなみに、16777215は0x00ffffffだけど、
本当にこの値をrecv()が返してきてるの?
lenの値が16777215だった場合の領域破壊はこの際置いておくとしても、
そこのとこどうよ。
0776デフォルトの名無しさんNGNG
telnetのソースコードありますか?あったら下さい。環境はLinuxです。
0777デフォルトの名無しさんNGNG
そんなものはどこにでもころがってます。
0778デフォルトの名無しさん NGNG
ソケットに関してというわけではないので、恐縮なのですが。。。
VBで、InetコントロールのOpenURLメソッドで取得したHTMLデータ
をシーケンシャルファイルに保存すると、2バイト文字が化けて
しまいます。これを回避する方法がありましたら、ご教授ください!
よろしくお願いします!!!
0779デフォルトの名無しさんNGNG
>>777
777getおめでとう。

で、ください。くださいと言ってます。
0780デフォルトの名無しさんNGNG
FTPのLISTコマンドでファイル一覧を表示すると、.ファイルなどの隠しファイルが表示されませんが、隠しファイルまで表示するにはどうすればいいでしょうか?
0781デフォルトの名無しさんNGNG
-a
0782デフォルトの名無しさんNGNG
>>781
それはUNIXのlsコマンドの話でしょう。
自分が言ってるのはFTPの応答コマンドの話。
0783デフォルトの名無しさんNGNG
うちではだまってても .* 全部見えるな
0784デフォルトの名無しさんNGNG
>>782
LIST -aとか
NLST -aとかやってみ。
0785780NGNG
LIST -a でできた
すんませんね>>781
アリガトサン>>784
0786780NGNG
しかしRFC959にはそんなこと一言も書いてないね。
なぜだろう?
0787デフォルトの名無しさんNGNG
959はObsoleteだから。
0788759NGNG
>>760
ありがとうございます
遅レスで申し訳ない上に、さらに質問ですが、

それは、selectだけでは判定できない という事でしょうか?
今は、ソケット監視スレッドで
タイム0でselectを呼び出してループしてます
FDを見て、情報ありの時だけ recvするイベントをだしてメインでrecvしてます

ソケット監視ループで、recvもすれば良いのかなと思ったのですが、
でも、recvって、ブロッキングにならない使いかたできるのでしたっけ?
0789デフォルトの名無しさんNGNG
>>786
つまり厳密には鯖依存ってこと
>>787
大嘘こくな
0790760ではないがNGNG
>>788
それ(loopでselect()の復帰を待ってrecv())でよいはず。
コネクション断でもselect()はデータ到着とみなす。
select()がデータ来てるといってるのにread()でブロックすることはない。
ただ、Win系ならWSAEventSelect()なんかの非同期I/Oを使用するAPIを呼ぶと、
socketが自動的にnonblocking-modeに設定されるので注意。
0791790NGNG
あ、一部訂正。>>790のread()はrecv()でした。すまそ。
0792790NGNG
あ、一部訂正。>>790のread()はrecv()でした。すまそ。
0793788NGNG
>>790
>コネクション断でもselect()はデータ到着とみなす。
知らなかった・・・勉強不足

selectループはそのままに、
recv() が 0 の時 切断処理を行うようにしたら、うまくいきました
ありがとうございました
0794デフォルトの名無しさんNGNG
>>788
ここ一遍目を通しておくとよいよ。
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
0795デフォルトの名無しさんNGNG
winCEとwin32のソケット通信に関する質問を
WinCEスレに書いたのですが、
もしかして、こっちのスレに書いたほうが良かったのかなーなどと
思いはじめ、
図々しくもリンク貼ります
CEスレの93です
↓
http://piza2.2ch.net/test/read.cgi/tech/998569580/93
0796デフォルトの名無しさんNGNG
MFC(WinInet)にてサーバにHTTPS経由でファイルをアップロードしてます。
500MBのファイルを1MBで分割して500回POSTしてるんですが
400回目あたりを過ぎたところで受信要求がタイムアウトして
しまいます。。。んでリトライして行うとまたタイムアウト
んでまた・・・の繰り返しで
8回あたりリトライするとサーバから受信要求が返されます。

原因として何が挙げられるんでしょうか??
ただ単にサーバに負荷がかかってるのでしょうか?それにしては
ブラウザからCGIを直接起動するときの反応が通常のような・・・。

ちなみにMFCではPOSTするたびにコネクションを新規生成してます。
サーバはSolaris+Apache+PHP。
0797デフォルトの名無しさんNGNG
>>795
bind()のエラーだったらTIME_WAITによるAddress already in useの可能性大。
きみも>>794が紹介してくれたとこに一度行ってきなさい。勉強になるから。
0798デフォルトの名無しさんNGNG
ここ、いいですね
ありがとうございます
0799 NGNG
SendMailで受け取った複数ドメイン(*.aaa.com、*.bbb.net、*.ccc.ne.jp等)毎、
複数ユーザ毎のメールを一括でPerl等に出力し、
Perlで転送先へ仕分けして再配送したいのですが、
エンベローブの宛先アドレスや送信元アドレスをPerlへパラメータとして与えたいと
思っています。(MAIL From: [email protected] や RCPT To: [email protected]の情報)
sendmail.defでそれらしい設定を探しましたが、
以下のようなPOPDOMが最も近そうでした。

PSEUDO_POP_DOMAIN=yes/no
POPDOM_MAILER_PATH='/usr/sbin/lmail'
POPDOM_MAILER_FLAG=$PROG_MAILER_FLAG
POPDOM_MAILER_ARGS='lmail -d $h $u'
POPDOM_MAILER_MAXSIZE=100000
POPDOM_MAILER_MAXLINE=

しかし、上記の設定では、$uは宛先の@前のユーザ名のみなので、
@以降のドメイン名部分が取得できません。
また、送信元情報の取得もできません。
そういった情報は固定の変数に設定されているのでしょうか?($〜)

それと、ACCEPT_ADDRSで*.hoge.comという形式でドメイン受信の設定は
可能でしょうか。
TLDは手動設定でいいのですが、サブドメインの登録は自動化したいので、
DNSの*指定のように全サブドメイン対象の設定にしたいと思っています。
0800800NGNG
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800 800
0801デフォルトの名無しさんNGNG
やはり一つのポートには一つのソケットしかつなげられないわけですか?
0802デフォルトの名無しさんNGNG
>>881
基本的にはYes
しかし一つの代表ポートに複数の接続要求を出すことは出来る
TCPのテストプログラムを作って接続語の相手先のポート番号を確認すれば意味は分かる
0803デフォルトの名無しさんNGNG
winsock2.0を使ってプログラムしているのですが、
ひとつ不可解な現象にあって困ってます。
recvで受信するときに、改行文字(\r\n)が送られて来ても、
戻り値で2が帰ってくると思ってたのですが、1なのです。
どうしてでしょうか?

ちなみに、受信バッファを監視していると確実に\r\nが書き込まれてました。
0804デフォルトの名無しさんNGNG
あ、ちなみにtelnetで接続して試してます
0805デフォルトの名無しさんNGNG
>>803
質問内容がいまいちわからないですが、、、

socket層には改行文字なんて概念はありません
純粋にバイナリを送受信してるだけです

送信元が\r\nを送ったんなら、\r\nが届くだろうし、
\nだけを送ったんなら\nだけが届くでしょう
0806デフォルトの名無しさんNGNG
>>805
返答どうもです。
えっと、症状なのですが、確実に\r\nは送られて来てます。
しかし、recvの戻り値が1なので、単純に戻り値を元にバッファを連結すると
\nが上書きされてしまうのです。
0807デフォルトの名無しさんNGNG
相手がUNIXならtelnetを使っても改行コードは\nしか送られてこないはず
勘違いしてない?
0808デフォルトの名無しさんNGNG
W2kでtelnetして接続。
Enterを押して改行だけ送信。

char buf[4096];
memset(buf,0,sizeof buf);
len = recv(c, buf, sizeof buf, 0);

accept後に上記のソースで受信すると、
len = 1;
buf[0] = '\r';
buf[1] = '\n';

こういう状態になってます。
len = 2なら納得できるのですが・・・

と、いう話です。
0809デフォルトの名無しさんNGNG
ウザくて申し訳ないですが、ageさせてもらいます。
どなたか、よろしくお願いします
0810デフォルトの名無しさんNGNG
一対一でつながるwinsockのサーバーとクライアント両方を作ってます

つながっている状態から、

クライアントがソケットを切断した場合、

サーバー側は、一度ソケットを閉じないで
そのままlistenしても良いのですか?
0811デフォルトの名無しさんNGNG
閉じろ
0812デフォルトの名無しさんNGNG
>>810
接続受付用のソケットとデータ通信用ソケットの違いを理解していない奴が多すぎる
0813810NGNG
じゃあ、
閉じる(closesocket) -> socket生成(socket) -> bind ->
listenで良いのですか?
0814デフォルトの名無しさんNGNG
>>810
acceptで受け取ったsocketは閉じるとして、
bindした方は閉じる必要無いのでは?
0815デフォルトの名無しさんNGNG
>>813

812が言っていることに対して勉強し直せ。
0816810=813NGNG
やっとわかりました。自分の大ボケぶりが恥ずかしい。

1.bind->listen->accept用のソケット(socketで生成)と、
2.acceptで受け取ったデータ通信ソケットということですね

で、2は閉じて、また新たにacceptしなさい
ということですね
0817socksockNGNG
Win98で動作していたwinsockプログラムを
Win2kでビルドし直して動作させたところ、
30分ぐらいで止まってしまいました。

Win2kはSP2を適用しています。(SP1ではBugが…)
SP2でwinsockプログラムがうまく動作しないという噂
を聞いたことがありますでしょうか。
0818デフォルトの名無しさんNGNG
いっさいありません
0819デフォルトの名無しさんNGNG
>>817

OSを疑うよりもまず自分のコードを徹底的に疑いましょう。99.9%は自分のミスです。
0820デフォルトの名無しさんNGNG
WinInetって使えるの?
さっきちょっと調べたら送信要求タイムアウト設定できない
バージョンもあるじゃん。
WinInet使ってHttp転送しよとしてるんだけど、諦めろってことか?
0821デフォルトの名無しさんNGNG
>>819
0.1%もOSに責任があるようなOSなぞ逝ってよし
0822デフォルトの名無しさんNGNG
>821

マターリいこうよ、なっ?
0823デフォルトの名無しさんNGNG
>>821
0.1%って微妙な線だな
Winは45%くらい責任があるしなぁ
BSDくらいか?
0824デフォルトの名無しさんNGNG
>>823
なんでもOSのせいにするなって
0825デフォルトの名無しさんNGNG
大概の場合、自分のミスをOSが許容してしまい、環境が変わると発現する
でも結局ミスしているのは自分
以前、人殺ししたけど捕まらなかったから、また殺したら今回は捕まるのはおかしいと言っているようなもの
0826デフォルトの名無しさんNGNG
↑こいつ何言ってんの????????
0827デフォルトの名無しさんNGNG
>826

>825は>823に文句言ってんの。

分かった?
0828デフォルトの名無しさんNGNG
>>821

その0.1%のバグもほぼ対処法がある。
その対処を知らない/行っていないのはやっぱり開発者の責任。
0829元PGNGNG
>828

そうとも言い切れないと思うけど?

漏れは5年間でメーカーが認めたOSバグに2回遭遇したよ。
(汎用機でね、KシリーズとASシリーズ)
ASのバグなんて、工場のシステム2日間止まって大騒ぎ、保
証騒動になってた。
米国の開発チームにまで話がいったのどうのと聞いた。

OSのバグやと騒ぐ奴に限ってショボミスしてるというのは賛成
する。
大体、開発者のミスだもんな。

上記のトラブル時は、その考え方のせいで対応が遅れたけどな。
0830デフォルトの名無しさんNGNG
ネットワーク初心者なのですが、ソケットとポートに関する質問です。

まず、サーバがポート番号10000を見張っている、並列サーバ
(fork()する、またはマルチスレッド)だとします。サーバは、ク
ライアントから接続要求が来ると、要求を受け付けて、要求を受
け付けるためのプロセスをfork()します。fork()されたプロセス
はそれぞれサーバ側では10000番ポートを利用して通信を行いま
す。

クライアント1: 20000 <- TCP/IP -> 10000 :サーバプロセス1
クライアント2: 20001 <- TCP/IP -> 10000 :サーバプロセス2

ここで、疑問なのですが、要求を処理するためにfork()されたプ
ロセスは、それぞれサーバ側では10000番ポートを利用して通信
を行いますよね。クライアントが複数あった場合、10000番ポー
トに飛んできたデータは、サーバプロセス1に渡すべきかサーバ
プロセス2に渡すべきかどうやって判断するのでしょうか?
TCP/IPでの接続確立とは、こういったセッションの管理を自動で
やってくれるものなのでしょうか?それとも私、根本から勘違い
しています?
0831デフォルトの名無しさんNGNG
>>830
また>>812に該当する奴が出てきたな
0832 デフォルトの名無しさんNGNG
>>812に付け加えるに、
TCPの接続は、
・自分のIP address
・自分のport番号
・相手のIP address
・相手のport番号
の4つ組で識別される。始めの二つだけではない。
始めの二つは同じなのに別の接続、という事があり得るという事。

そして、TCPの接続と(各自分サイドの)socketは一対一対応。
上記の事を知らない人が多い事を見ても、socketはいい抽象化だと思われ
0833デフォルトの名無しさんNGNG
ポートっていくつぐらいあるの?
結構少ないのかなあ
0834デフォルトの名無しさんNGNG
素人です。教えてください。

(スレ立てるまでもない第5弾にも投稿したのですが…)
(こちらの方が、より技術的なレスがくると思い再投稿します)

今まで作業上、
TeraTermを用いてIP経由(TCPポートは任意。仮に6001)でリモートアクセスサーバに
接続後、TeraTermのbreak信号を送出(Alt+b)して遠隔端末にして使っていました。

これと同等のことをperlで実行したいと考えているのですが、
方法がいまいちわかりません。

IO::Socket::INETでソケット作ってそれにbreak信号を流すことで
実現できると考えているのですが、ブレーク信号って具体的にはどうやって送るんだろ?
というところで行き詰まっております。

ex.) printf <$SOCKET_hoge> "break信号??"; # という感じかなーと。

それとももっと別の良い方法があるのでしょうか?

ご指導のほどよろしくお願いします。
0835 デフォルトの名無しさんNGNG
>>834
> TeraTermを用いてIP経由(TCPポートは任意。仮に6001)でリモートアクセスサーバに
> 接続後、TeraTermのbreak信号を送出(Alt+b)して遠隔端末にして使っていました。

相手はtelnet protocolを理解するわけね?

IAC BRKを送る。"\255\243"
http://www.iij.ad.jp/pub/RFC/rfc845.txt
0836デフォルトの名無しさんNGNG
File Not Found
?
0837 デフォルトの名無しさんNGNG
>>835
> http://www.iij.ad.jp/pub/RFC/rfc845.txt

ftp://ftp.iij.ad.jp/pub/RFC/rfc854.txt

でした。(記憶で書いたたら番号も間違えていた…)
0838デフォルトの名無しさんNGNG
>>835

いまさらながら、
RFCと2chのありがたみを感じております。

(RFCを真剣に読もうとしなかったあっしが恥ずかしいです。)

感謝。多謝。
0839デフォルトの名無しさんNGNG
telnetあげ
0840デフォルトの名無しさんNGNG
ネットワークプログラミングの練習もかねて、
TFTPのサーバプログラムを作ってみようと思うのですが、
参考になるサイトや書籍、
もしくは、ソース公開してるフリーソフトで参考になりそうなもの、
なにか知りませんか?
0841デフォルトの名無しさんNGNG
>>840
tftpd.cそのもの。BSDやLinuxにはついてくる。
0842デフォルトの名無しさんNGNG
>>840
http://RFC.net/rfc1350.html
このくらい自分で探せや
0843デフォルトの名無しさんNGNG
共有メモリを使うと、セマフォもだいたい同時に使うのですが、
セマフォの使い方がよくわかりません。
POSIX, SYSV,形式それぞれについて教えてください。

ネットワークプログラミングIPC編は読みました。
それでも、サパーリです。
0844 デフォルトの名無しさんNGNG
>>843
> セマフォの使い方がよくわかりません。

原理が分かってないのだから、OSの原理/基礎の本を読め。
0845-NGNG
>共有メモリを使うと、セマフォもだいたい同時に使うのですが、
>セマフォの使い方がよくわかりません。

だいたい同時に使ってるのに使い方がよくわからないのか??
0846デフォルトの名無しさんNGNG
データ送受信用socketが接続状態の時、
サーバ側からshutdown -> closeというのは、
本来やってはいけない事なのでしょうか

win32でこれをやった場合、特に問題なかったのですが、
winCEでこれをやったら動作がおかしくなってしまうのです
(その後、新しいsocket生成はできるのだが、connectができない
リセットかけるまで復帰しない)

かならずクライアント側から先に
shutdown -> closeしなくてはいけないのでしょうか?
0847デフォルトの名無しさんNGNG
>>846
>>794
0848デフォルトの名無しさんNGNG
>>794のサイト(・∀・)イイ!! thnx>847
0849  NGNG
特定のアプリケーションの行っている通信パケットを監視するには
どうやればいいんでしょうか?
本屋であさってみたものの、どれもピンとくるものがなくって・・・
0850デフォルトの名無しさんNGNG
パケットモニタを使ってみるとか。
http://www.vector.co.jp/soft/winnt/net/se136129.html
0851デフォルトの名無しさんNGNG
winsockで、
一度にsendして良いサイズの基準って、なにかありますか?

何も考えずにそのまま、最大2Mくらいのものを一度にsendしていたのですが、
(有線の)LANでは特に問題なかったのですが、
(しかも、sendの戻り値を見ると、一回のsendで送れてしまっているようである)
無線LANで使用したら、
sendすると固まってしまい、しばらく(数十秒)してタイムアウトで返ってくる、という事が
多く発生するようになりました
それで、分割して(たとえば2kくらいとか)sendするようにしたのですが、
そしたら固まる確率はかなり減ったのですが、やっぱりたまに固まりがおきてしまいます

無線LAN自体の問題でしょうか?
0852デフォルトの名無しさんNGNG
>>851
たしか、8kか16kだったような。
0853デフォルトの名無しさんNGNG
>>851
ただ、分割してるだけ?
2k送ったら1バイトのackを受信って感じでどうかな?
ちょっと遅くなるかもしれないけど。
0854デフォルトの名無しさんNGNG
バッファの量を取得する関数を使え
あとは自分で調べよ
0855デフォルトの名無しさんNGNG
>>854
ヒントくださーい。
0856ヒントNGNG
おぷと
0857デフォルトの名無しさんNGNG
>>856
もう一声!
0858デフォルトの名無しさんNGNG
getsockopt
SO_MAX_MSG_SIE
0859デフォルトの名無しさんNGNG
追加(Stream)
SO_RCVBUF
SO_SNDBUF
0860デフォルトの名無しさんNGNG
>>858, >>859
これ、どう使えばいいんですか?
0861デフォルトの名無しさんNGNG
>>860
調子に乗るな、いい加減にしろ
0862デフォルトの名無しさんNGNG
>>861
なーんだ、知らないんだー
■ このスレッドは過去ログ倉庫に格納されています