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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- ファイアウォール ポート開放で利用可能なTCP一覧の中に利用したいTCPが入ってない場合どうすればいいのでしょうか? 2 2022/09/12 10:31
- UNIX・Linux iptablesを設定するとメール送信処理が遅くなる!? 6 2022/06/07 01:11
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- 父親・母親 信号待ち中、左足でブレーキをかけて、右足でアクセルを吹かし続けていたら睨まれていました。異常な事を 7 2022/07/19 11:22
- 運転免許・教習所 青信号で発進するのが遅いと怒る親と青信号は慌てて発進する必要が無いと言う運転手の喧嘩どちらが正しい? 7 2023/03/12 12:03
- 運転免許・教習所 青信号になったら何秒以内に発進しないといけませんか?、どれだけ慌てても遅いと文句、無視が正解ですか? 6 2022/05/04 14:15
- OCN光 VDSL回線での不具合 ネット回線変えるべきか? 3 2023/01/07 23:14
- モニター・ディスプレイ 長文です。デスクトップPCのHDMI入力機能について 4 2022/09/20 17:58
- Outlook(アウトルック) OCN WEBメールについて 1 2022/05/18 23:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
RS-232Cでバイナリデータを受信...
-
ソケット通信内 read関数について
-
RS232C通信(PC⇔PLC)
-
WinsockAPIのrecvfromの受信デ...
-
ネットワークカメラの動画保存...
-
recv関数の受信結果について
-
シリアル通信 大きいサイズの...
-
「スイッチングハブのバッファ...
-
【CAsyncSocket::OnReceive()呼...
-
Connection reset by peer
-
VB2005でWin32APIを用いてRS-23...
-
VC++2010 TCPIP通信の受信処理...
-
MSCommでoutputできない
-
socket: recvはいつ,どれだけ...
-
0byteデータの送信と受信
-
メールを数日後に自動返信
-
Macターミナルで実行中のプログ...
-
VBSの処理中一旦処理を止めて再...
-
バックグラウンドのプロセスの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
WriteFile()でのデータ送信がで...
-
winsockでソケット通信の開発を...
-
「スイッチングハブのバッファ...
-
socket: recvはいつ,どれだけ...
-
シリアル通信の出力バッファと...
-
Connection reset by peer
-
RS232C通信(PC⇔PLC)
-
RS-232Cでバイナリデータを受信...
-
WaitForMultipleObjects関数の...
-
Linuxでのシリアル通信について...
-
rs232cでの受信データ(mscomm)...
-
UDP処理のエラーについて
-
SocketのSend関数でのCLOSEの検...
-
ソケット通信内 read関数について
-
recv関数の受信結果について
-
シリアルポート通信
-
MSCommでoutputできない
-
SerialPortのDataReceivedイベ...
-
COMポートの同時オープン同時読...
おすすめ情報