問題タブ [unix-socket]
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.
c++ - sockaddr_un で connect(2) を呼び出すときのコンパイラ エラー
C++ プログラムで connect(2) を簡単に呼び出しています。コードは次のとおりです。
connect(socket_fd, (struct sockaddr *)&name, SUN_LEN(name));
(ここでname
は、 ですstruct sockaddr_un
)。
これをコンパイルしようとすると、g++ から次のエラーが発生します。
プログラムのどこにも -> 演算子を使用していないため、これには完全に困惑しています。name
のアドレスを取得する方法、またはキャストする方法に何か問題がありますか?
zsh - zsh で zsocket によって開かれたソケットを閉じる
終わったよ:
ソケットの FD を閉じるにはどうすればよいですか? (FD20はこちら)
c - ローカルリンクアドレスでリモートグローバルリンクアドレスを取得するにはどうすればよいですか?
Routing Information Protocol (RIP) パケットを取得し、このパケットからソース ルーターのリンクローカル アドレスを取得できます。しかし、リンクローカル アドレスでルートを設定することはできません。送信元ルーターのグローバル リンク アドレスが必要です。C でコードをどのように記述すればよいですか? ありがとう。試してみましたが、うまくいきません。
}
go - Go プログラミング言語で Unix ドメインソケットを確実に unlink() する方法
シンプルな HTTP サービスをホストする Go プログラムがあるので、サイトのリクエストの一部を処理するリバース プロキシとして、ディレクティブを介しlocalhost:8080
てパブリックnginx
ホストをそれに接続できます。proxy_pass
これはすべてうまく機能しており、問題はありません。
セキュリティを向上させ、TCP の不要なプロトコル オーバーヘッドを削減するために、ローカル TCP ソケットではなく Unix ドメイン ソケットで HTTP サービスをホストするように Go プログラムを変換したいと考えています。
問題bind()
: 問題は、プログラムが終了した後でも、Unix ドメイン ソケットを再利用できないことです。2 回目 (およびそれ以降) に Go プログラムを実行すると、致命的なエラーで終了します"address already in use"
。
一般的な方法はunlink()
、サーバーのシャットダウン時に Unix ドメイン ソケットを使用する (つまり、ファイルを削除する) ことです。ただし、これは Go では注意が必要です。私の最初の試みはdefer
、メイン関数 (以下を参照) でステートメントを使用することでしたが、CTRL-C などのシグナルでプロセスを中断すると実行されません。これは期待できると思います。残念ですが、予想外ではありません。
質問unlink()
:サーバー プロセスがシャットダウンしたときのソケットのベスト プラクティスはありますか (正常または非正常)?
func main()
これは、参照をリッスンするサーバーを開始する私の一部です。
sockets - Linux: Unix ドメインのデータグラム ソケットは connect/recv の仕様に従っていませんね?
のマニュアルにconnect
は次のように書かれています。
ソケット sockfd が SOCK_DGRAM タイプの場合、 addr はデフォルトでデータグラムが送信されるアドレスであり、データグラムが受信される唯一のアドレスです。
次の C プログラムは、接続先 ( ) 以外のアドレス ( ) からメッセージを受信し、終了するため、UNIX ドメイン ソケット上のconnect
/の Linux 実装でのエラーを明らかにしているようです。それとは対照的に、私が期待する動作は、プログラムが終了しないということです。これは、接続先のアドレスからのメッセージが到着しないのを忠実に待つためです。(戻り値のチェックと print ステートメントで例を意図的に混乱させませんでした。これは、 で簡単に調べることができるためです。実際には、呼び出しはさまざまなプロセスによって行われます。)recv
@"PWE0"
@"STAR"
strace
では、Linux [および HP-UX (ファイル システムのパス名を含む)] は仕様に違反しているのでしょうか、それとも何か不足しているのでしょうか?
linux - Linux/Unix ソケット自己接続
クライアントがサーバーに接続しようとすると、クライアントとサーバーが両方とも localhost である場合、自己接続が発生する可能性があります (送信元ポートと宛先ポートがたまたま同じでした)。しかし、私の問題は、クライアントがそのポートをリッスンしていないことです。どうすれば自己接続が可能になりますか?
c - msgdr の sys/socket 欠落メンバー: msg_control、msg_controllen、msg_flags
UNIX DOMAIN SOCKETS を使用して、小さなクライアント サーバー アプリケーションを作成しようとしています。
/に を使用してmsghdr
いますが、次のコードをコンパイルすると、次のエラーが発生します。sendmsg
recvmsg
エラーメッセージ:
gcc sc -os -lsocket
sc: 関数 `main' 内:
sc:59: エラー: 構造体には「msg_control」という名前のメンバーがありません
sc:60: エラー: 構造体には「msg_controllen」という名前のメンバーがありません
sc:61: エラー: 構造体には「msg_flags」という名前のメンバーがありません
*エラーコード 1
linux - Unix ドメインソケット: accept() が sun_path を設定しない
Unix ドメイン ソケットでいくつかのテストを行っており、問題なく通信できaccept()
ますが、テスト プログラムのサーバー側で呼び出すと、返さstruct sockaddr_un
れた にsun_path
.
呼び出し後に Inet ソケットのアドレスとポートが適切に入力されていることは確かですaccept()
が、テスト プログラムで何か間違ったことを行っているのでしょうか、それとも間違った結果を期待しているのでしょうか?
CentOS 6.2 と gcc 4.4.6 を実行しています。
サンプルコード:
server.c
client.c
質問を繰り返すだけです:
サーバーでsun_path
の呼び出し後に入力されないのはなぜですか?accept()
c - Unix ドメイン ソケット : レイテンシを一定にする
問題の概要: AF_UNIX 安定した送信、バースト受信。
UNIX ドメイン データグラム ソケット経由でデータを受信するアプリケーション B があります。それにデータを送信するピア アプリケーション A があります。A と B の両方が継続的に実行されています (SCHED_FIFO です)。私のアプリケーションAも受信時刻を出力します。
ピア アプリケーション B は、さまざまなタイミングでデータを送信できます (ミリ秒単位でのみ変化します)。理想的には (私が期待すること)、パケットの送信遅延は受信遅延と正確に一致する必要があります。例えば:
ここで、x は一定の遅延です。
しかし、私がBで観察したことを実験したとき:
(w、x、y、z は異なる一定の遅延です)。そのため、送信時刻が指定されている場合、受信時刻を予測することはできません)。
UNIXドメインソケットにバッファリングが関係しているためですか?受信時間が送信時間から予測できるように、問題の回避策を提案してください。1ミリ秒の精度が必要です。
(バニラ Linux 3.0 カーネルを使用しています)
c - Unix ソケットを使用して「アドレスは既に使用されています」というエラーが表示される
Unix ローカル ソケットを使用して以下の C ソースを作成すると、アドレスが既に使用されているというエラーが表示されました。詳細情報を確認man 7 Unix
した後、プログラムを実行するサブフォルダーを作成しようとしました (明らかにsun_path
現在のフォルダーのフィールドを変更します) が、エラーは同じでした。
私を助けることができる人はいますか?
ソースコード: