複数のスレッドから同じソケットに関数呼び出しを書き込む
安全ですか?それらの間に同期を追加したいですか?ネットワーク層からアプリケーション層へのアプリケーションの書き込み/読み取りが遅れるなどの問題が発生しますか?
Linux Redhat 環境で GNU C++ ライブラリ GCC 4 を使用しています。
これはサーバー側のプロセスであり、サーバーとクライアントの間にソケット接続は 1 つしかありません サーバーとクライアントは 2 つの異なるマシン上にあります データはサーバーからクライアントへクライアントからサーバーへ送信されます
問題1-サーバーがクライアント側にデータを送信する場合(複数のスレッドが同じ単一ソケットを介してクライアント側にデータを書き込みます)しかし、一部のスレッドから書き込まれたデータはクライアント側に送信されず、同じネットワーク層にも送信されませんマシン (Tcpdump にはそのデータがありません)
問題 2 - クライアントがサーバーにデータを送信するとき クライアントによるサーバーのデータ送信がサーバーの TCPdump に表示され、ループ内の「読み取り」および「選択」機能を使用して単一のスレッドからソケットから読み取っているサーバー アプリケーションに対して受信されない
これらの問題が発生するパターンを特定できませんでした これは、非常に多くの複数のスレッドが同じソケットに書き込みを行っているときに発生したと考えられます OS が同期を処理することを期待して、書き込み関数を同期していません