
C言語でネットワークプログラミング(ストリーミングのプログラムを作成しました)
UDPを使用したプログラミングなのですが、サーバ側でデータを送るのが途中でいったん停止することがあるんです。数秒停止してまた送る。
もしクライアント側で何か処理が止まったときに、
ソケットのsendto(。。。。。)がブロックするのであればそのエラーもなっとくいくのですが。
sendtoってブロックするのでしょうか??
recvfrom()はソケットディスクリプタに応答があるまでブロックするのはわかるのですが・・・。sendtoはお構いなしに送信するんだったと思うのですが。
環境はサーバ、クライアントマシンともにlinux7.2です。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
sendto()のマニュアルにもありますが、socketがノンブロッキングモードでない限り、そのsocket用の送信データスペース(バッファ)が足りないと、ブロックします。
CPUが速い場合やネットワークが混んでいる場合に起きる可能性があります。UDPはいくらパケットの到着を保証しないといっても、送信側でCPUが速すぎたから消えるんではあんまりですよね?UDPでパケットが消えるのは、中継のルータでバッファがあふれたときくらいです。
もし、ノンブロッキングモードにしたいなら、setsockopt()とSO_SNDTIMEOオプションが絡むと思いますが、試したことはないのでわかりません。必要なら調べてみてください。でもこれをすると、バッファがあふれて送れない状況が頻出するのであまり好ましくないとは思います。
バッファの大きさもsetsockopt()で変更できるはずです。
送信側が本当にいつパケットを出したかを知るのは大変かもしれません。tcpdumpやetherealでパケットモニタリングできますが(スイッチングハブ越しではもちろん無理)、それでもモニタリングしているPCで受信した時刻しかわからないと思います。送信側PCで同時にモニタリングしてもいいでしょうが、別のプロセスが走る状況が好ましいかどうかによります。
バッファを最小限にしてsendto()が-1を返してerrno==EWOULDBLOCKだったら再送して、成功したときにその時刻を調べるというのアイデアもありそうです。
結局のところ、本当に知りたい時刻は何かということですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(教育・科学・学問) 小学生にプログラミング(Scratch)を教える方法 2 2022/06/01 06:39
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- ノートパソコン ESETの初期インストールの仕方 1 2022/10/14 08:26
- マルウェア・コンピュータウイルス 動画再生プレイヤーのソフトをダウンロードしてインストールしたら、インストールの途中でセキュリティーウ 1 2023/02/07 00:50
- PHP PHP でメールフォームを作成したい 1 2022/05/04 22:28
- アプリ visual basicをネットで実行する 2 2022/08/07 11:16
- その他(メールソフト・メールサービス) メールが送信できない 発信側でできる対策 3 2023/05/11 10:22
- Instagram 停学などになりますか? 3 2023/07/12 03:08
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル VBA でのCOMポート...
-
相手のIPアドレスを取得する方法
-
VB6‥ソケットについて
-
Winsockプログラミング Connec...
-
recv関数でフリーズしてしまう
-
Winsockで接続待ちタイムアウト...
-
ソケットを用いた1対多通信につ...
-
UDPを使って通信速度測定プログ...
-
WinSockでの通信プログラムがう...
-
ftpクライアントでの接続後の、...
-
RS-232Cのポート番号を知りたい
-
ソケット通信
-
ネットワークプログラミングに...
-
Winsockを利用したファイルの送...
-
Macターミナルで実行中のプログ...
-
家電製品の電力周波数を変える機械
-
ウインドウにデータを入力する...
-
VBSでのSendKeysでの画面の最小化
-
ACCESS側からEXCELの書式を設定...
-
第三者に画面を同期するソフト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
Socket通信の0バイト受信について
-
VB6のwinsockでconnectできない
-
ソケットでクライアントのipア...
-
ソケットを用いた1対多通信につ...
-
ソケットのクローズについて
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
相手のIPアドレスを取得する方法
-
recv関数でフリーズしてしまう
-
送信したデータの一部が文字化...
-
closeされたsocketへの動作につ...
-
UDP通信(SNMP)したいが、うま...
-
ソケット通信
-
Connectエラーが出てしまう・・...
-
SendRequestでヘッダが受信され...
おすすめ情報