
winsockの動作について、質問させていただきます。
(1)UDPのsendto()でWSAEADDRNOTAVAIL(10049)が発生する。
数十個(64個以内)のUDPソケットを用意し、for()ループで全てのソケットから送信した場合、途中からエラー(WSAEADDRNOTAVAIL)が発生してしまいます。
あて先のアドレス/ポートは全て同一なので、原因は別にあるのではないかと考えています。
sendto()と次のsendto()の間にスリープを入れると、WSAEADDRNOTAVAIL(10049)が発生しなくなるのは確認しました。
一度に処理できる数が決まっているといったような、制限があるのでしょうか?
(2)TCPのconnect()に時間がかかる。
TCPクライアントのconnect()に30秒くらいかかる事があります。
connect()はノンブロッキングで実行し、その後にselect()を繰り返し呼んで接続の確認をしているのですが、その間にWSAGetLastError()でエラーを確認するとWSAEWOULDBLOCK(10035)となっています。
パケットをダンプすると"SYN"が送信されていないため、TCPクライアント側の問題だと考えています。
connect()が一瞬で成功する場合もあるため、なにか問題があるのではないかと思っているのですが、30秒くらいかかる場合もあるのでしょうか?
※(1)のUDPの送信処理を行った直後に、このTCPのconnect()を行うと時間がかかるような気がしています。
よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
(1)TCP/IPプロトコルスタックの内部バッファが埋まっているのでは?
(2)(1)と同様にTCP/IPプロトコルスタックに処理が溜まっているのでは?
内部動作の詳細は知らないけどユーザプロセスとは別のプロセスだかスレッドだかで処理しているんじゃなかったかな。それだとプロセススイッチのオーバーヘッドを減らすため、呼び出しプロセスが待ちに入るまで実際の処理の開始を遅延していると思う。
回答、ありがとうございます。
勉強不足で、いまひとつ理解は出来ていないのですが。。
(1)については、setsockopt()で送信バッファのサイズを指定したところ、WSAEADDRNOTAVAIL(10049)が発生しなくなりました。
サイズに0を指定してバッファリングを無効にする、といったことも出来るようなので、いろいろ試してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WaitForMultipleObjects関数の...
-
Macターミナルで実行中のプログ...
-
VB6.0 SHELLで起動...
-
スロットゲームのプログラミング
-
フレームワークとプロセスの違...
-
STATUSのZフラグについて
-
CImage::ReleaseDC()のエラーで...
-
あるプログラム実行中に別のプ...
-
「単体テスト」に関する深刻な...
-
このレジの並び方は間違ってま...
-
CreateCompatibleDCを初期化時...
-
プロセスの停止
-
Linuxでのスレッド間メッセージ...
-
ACCESS側からEXCELの書式を設定...
-
VBA kernel32 の意味
-
コンソールアプリケーションの...
-
php
-
エクセルVBAの自動変換機能?
-
プロセスが実行中かどうか調べ...
-
他の実行ファイルを実行するプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
「スイッチングハブのバッファ...
-
WriteFile()でのデータ送信がで...
-
socket: recvはいつ,どれだけ...
-
winsockでソケット通信の開発を...
-
RS-232Cでバイナリデータを受信...
-
SerialPortのDataReceivedイベ...
-
シリアル通信エラー
-
C#で通信処理。応答がない場合...
-
Linuxでのシリアル通信について...
-
シリアル通信の出力バッファと...
-
バイナリデータ受信時のデータ順
-
ReadFileについて
-
トラックバック機能を作りたい
-
ソケット通信内 read関数について
-
recv関数の受信結果について
-
ReadFile(GPSとの通信)Win7で...
-
visual c# 2010 シリアル通信ア...
-
WinsockAPIのrecvfromの受信デ...
-
popen実行時にバッファが空の場合
おすすめ情報