問題タブ [setsockopt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2856 参照

c++ - setsockopt のエラー 22 とは何ですか?

エラー番号 22 を返す次のコードがあります。22 が何を指しているのかどこにもわかりません。

0 投票する
0 に答える
3678 参照

android - Linux がマルチキャスト グループに参加すると、setsockopt が errno 19 device not found を返す

UDP ノンブロッキング ソケットを設定しました。ソケットを作成してバインドし、次のようにマルチキャスト グループに参加しています。

最初の 3 つの setsockopt 呼び出し (MULTICAST_TTL、MULTICAST-IF、および REUSEADDRESS) は正常に機能し、バインドされます。その後、マルチキャスト グループに参加しようとすると、errno 19 - Device Not Found が返されます。imr インターフェイス アドレスを INADDR_ANY に変更すると、デバイスは検出されますが、プログラムはパケットを受信しません。ADDRESS を変更しました。マルチキャスト範囲内であることはわかっています。私のマシンの eth0 ではマルチキャストが有効になっています。インターフェイスを使用struct ip_mreqn imrして変更し、適切に対処しましたが、変更はありません。スタック トレースを実行しましたが、それ以上の情報はありません。setsockopt が errno 19 で失敗したというだけです。

誰にもアイデアはありますか?私はここで少し絶望的です。私はこれをあまりにも長く続けてきました。

0 投票する
1 に答える
2246 参照

c - UDP_CORK を使用して UDP ソケットを適切に設定する方法

UDP でエコー サーバーを作成し、特定のファイルをパケットに分割してサーバーに転送するクライアントで作業しています。サーバーは、クライアントによって再構築されるパケットを返します。

個々のパケットの送信は問題なく機能します。ただし、UDP_CORK ソケット オプションを使用して、ファイルのできるだけ多くの部分を 1 つのパケットで転送しようとしています。私は次のコードで作業しています:

サーバーは、1 つの「通常サイズ」のパケットのみを受信して​​いることを示しており、必要なコルク パケットは受信していません。したがって、recvfrom() 呼び出しを介してクライアントによって受信された、この 1 つの通常のパケットのみが送り返されます。

UDP_CORK を正しく設定したかどうかわかりません。2 番目の引数は正しいですか? マニュアルページが完全に明確ではなかったため、2 番目のオプションが実際に何を意味するのかよくわかりません。コルクの仕組みを誤解している可能性もあります。

注意すべき点がいくつかあります。

  • 私は中級レベルのプログラマーだと思っていますが、ネットワーク プログラミングの経験はほとんどありません。
  • UDP はファイルの転送に最適ではないことを認識しています。これは最終的に、私が開発を支援している別のプロトコルに適応される予定です。

ありがとうございました!

0 投票する
2 に答える
7262 参照

sockets - インターフェイス名を使用してIP_MULTICAST_IFを設定する場合のsendtoの引数が無効です

マルチキャストパケットを送受信する小さなプログラムを書いています。送信インターフェイスをアドレスではなく名前(例:eth0)で設定する必要があります。したがって、(struct in_addrではなく)struct ip_mreqnを使用して、そのimr_ifindexフィールドを使用してインターフェイスインデックス(インターフェイスの名前を使用して取得できます)を設定できるようにする必要があります。

ただし、何らかの理由で機能しません。setsockopt()の呼び出しは正常に機能しますが、次のsendto()の呼び出しは「無効な引数」エラーを返します。もちろん、ip_mreqnをin_addrに置き換えて、代わりにインターフェイスのアドレスを使用すると、エラーは消えます。

以下は私のコードです:

IP_MULTICAST_IFを設定するときにstructip_mreqnを使用することに問題はありますか?誰かが何か考えを持っていますか?本当に助けに感謝します。ありがとう。

宛先ポートとアドレスはすでにネットワークバイトオーダーになっていることに注意してください。

0 投票する
1 に答える
1549 参照

c - read() を C の setsockopt() で使用する

サーバーとクライアントのコードを書こうとしていて、ある時点で立ち往生しています。クライアントに一定時間読み取りとタイムアウトをさせたい。timeval 構造体で時間を指定する SO_RCVTIMEO で setsockopt() を使用しようとしましたが、私の read() は timeval 構造体で指定した時間を待ちません。つまり、setsockopt() の後に read() を使用した場合、read() は指定された時間だけ待機しています。最初に write() を呼び出してから read() を呼び出すと、read() 関数は、timeval 構造体で指定された時間を待たずにすぐにタイムアウトします。私のコードを以下に示します。

// サンプル クライアント コード

上記のコードでは、read() 操作を 15 秒でタイムアウトさせたいと考えています。しかし、すぐにタイムアウトします。私は助けが必要です!!!

0 投票する
1 に答える
4298 参照

linux - Linux の UDP ソケットを使用した SO_REUSEADDR。それは必要ですか?

UDP ソケットがbind()ポート 53 (DNS) に接続されています。UDP にはTIME_WAIT状態がありますか、またはSO_REUSEADDRUDP ソケットで無意味に使用されていますか?

0 投票する
1 に答える
2558 参照

linux - Linux の「受け入れられた」fd での setsockopt

SO_REUSEADDR に対する Linux での setsockopt の動作について、かなり奇妙な観察がありました。1行で:「リスニングソケット」でacceptによって返されたfdにsockoptを適用すると、socketoptionはリスニングソケットが保持するポートに反映されます。

わかりましたいくつかのコード。

サーバー : ソケットを開き、SO_REUSEADDR を true に適用します。接続を受け入れてから、accept によって返された fd の fd に SO_REUSEADDR を false に適用します。

Client : クライアントはサーバーに接続し、その後は何もせず、サーバー ソケットが TIME_WAIT 状態のままであることを確認します。

問題を再現する手順。

  1. サーバーを実行します。
  2. クライアントを接続します。
  3. サーバーを強制終了して再起動します。サーバーが Bind Failure で失敗する

これをmac osでテストしました。そして、バインドは失敗しませんでした。私はすべての Posix 仕様を掘り下げましたが、このコードが未定義であると言っているものはありません。

質問:

これについてより多くの経験を積んだ人が、問題の理解を共有できますか?

0 投票する
1 に答える
5396 参照

c - getockoptは、setsockoptで設定されたものとは異なるIP_TOS値を返します

値をsetsockoptに設定するために使用しようとしています。呼び出しが返されました。ただし、は値が( )とは異なるに設定されていることを示しています。との値の不一致を引き起こした可能性があるものを誰かが知っていますか?IPTOSIPTOS_THROUGHPUTsetsockopt0getsockoptIP_TOS1IPTOS_THROUGHPUT0x8IPTOSsetsockoptgetsockopt

ログ出力は次のとおりです。

ソケット26にDSCPマーキングを設定する

ソケット26から8のsetsockoptは0を返します

ソケット26のDSCPマーキングは1であり、予想される8とは異なります。

以下はコードです:

0 投票する
1 に答える
1961 参照

c++ - setsockopt エラー WSAEADDRNOTAVAIL

ソース:

プログラムでこれを実行するたびに、次のようになります。

10049 は WSAEADDRNOTAVAIL のエラー コードで、「要求されたアドレスはそのコンテキストでは無効です」という意味です。

助けてください、なぜこのエラーが発生し続けるのかわかりません。

0 投票する
2 に答える
11853 参照

sockets - ノンブロッキングソケットで送信タイムアウトを設定するにはどうすればよいですか?

Linuxでのソケットの動作を理解するのにいくつか問題があります。

上記のコードでは、書き込みがバッファリングされているため、送信タイムアウトは意味がありません(書き込みシステムコールは、ユーザースペースバッファがカーネルバッファにコピーされるとすぐに返されます)。送信バッファサイズははるかに重要なパラメータですが、送信タイムアウトは価値がないようです。しかし、SO_SNDTIMEOを使用するコードをかなりたくさん見たので、私は確かに間違っています。受信機が非常に遅いと仮定して、SO_SNDTIMEOを使用してユーザースペースコードをタイムアウトするにはどうすればよいですか?