人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

windows XP - Linux(FC4) 間でソケット通信プログラムを書いています。
windows側をクライアントとしてwinsock1.0で実装、Linux側がサーバーです。

今、windows側からsend関数で画像データを送信します。画像データのサイズが100MB程度以下なら、全く問題なく送信できるのですが、それ以上のデータになるとsend()の返り値が-1になってしまいます。。。

windows、Linux、それぞれのOS側になにか制限があるのではないかと考えているのですが、どなたか原因をおしえていただけないでしょうか。

●質問者: doubleA
●カテゴリ:コンピュータ
✍キーワード:Linux OS Windows Windows XP クライアント
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● KUROX
●35ポイント

http://www.geekpage.jp/programming/winsock/wsagetlasterror.php

上記ようなコードを組み込んで、エラー内容を取得してはどう

でしょうか?

WinSock2.0でしか使えない機能のようですが、、

もしそうなら、WinSock2.0で簡単なソースを書いて、

エラーになるかどうか、エラーになった場合は、エラーコード

を取得して原因を調べるのが良いと思います。

winsock1.0でも、lasterrorぐらいは分かりそうですが、

ちょっと見つかりません。

◎質問者からの返答

失礼しました。

エラーコードは10057で、意味は

「ソケットが接続されていないか、sendto 呼び出しを使ってデータグラム ソケットで送信するときにアドレスが指定されていないため、データの送受信を要求することは禁じられています。」

だそうです。


2 ● ardarim
●35ポイント

下記のいずれかの原因と推測します。


おそらくどれかがある一定のサイズ以上送れない様なつくりになっているのでしょう。


どちらにせよあまり大量に送るのは危険なのでより小さい単位で何回かに分けてsend()すればよいのではないでしょうか?

ご存知とは思いますが、ソケット通信ではデータの切れ目は意識できませんのでsend()を小分けにして送ろうが、1回のsend()でまとめて送ろうが、recv()側での見え方(処理)は変わりません。

◎質問者からの返答

ardarimさん。

回答ありがとうございます。私もardarimさんが指摘されている3つの要因(LANドライバの制限については考えていませんでしたね、、、ご指摘ありがとうございます)についていろいろ調べているのですが、探し方が悪いのか、データサイズの制限に関する記述がみつからないのです。。。

できれば、ソースを提示していただけないでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ