問題タブ [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.

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

c++ - sockaddr_un で connect(2) を呼び出すときのコンパイラ エラー

C++ プログラムで connect(2) を簡単に呼び出しています。コードは次のとおりです。

connect(socket_fd, (struct sockaddr *)&name, SUN_LEN(name));

(ここでnameは、 ですstruct sockaddr_un)。

これをコンパイルしようとすると、g++ から次のエラーが発生します。

プログラムのどこにも -> 演算子を使用していないため、これには完全に困惑しています。nameのアドレスを取得する方法、またはキャストする方法に何か問題がありますか?

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

zsh - zsh で zsocket によって開かれたソケットを閉じる

終わったよ:

ソケットの FD を閉じるにはどうすればよいですか? (FD20はこちら)

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

c - ローカルリンクアドレスでリモートグローバルリンクアドレスを取得するにはどうすればよいですか?

Routing Information Protocol (RIP) パケットを取得し、このパケットからソース ルーターのリンクローカル アドレスを取得できます。しかし、リンクローカル アドレスでルートを設定することはできません。送信元ルーターのグローバル リンク アドレスが必要です。C でコードをどのように記述すればよいですか? ありがとう。試してみましたが、うまくいきません。

}

0 投票する
3 に答える
8396 参照

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()これは、参照をリッスンするサーバーを開始する私の一部です。

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

sockets - Linux: Unix ドメインのデータグラム ソケットは connect/recv の仕様に従っていませんね?

のマニュアルにconnectは次のように書かれています。

ソケット sockfd が SOCK_DGRAM タイプの場合、 addr はデフォルトでデータグラムが送信されるアドレスであり、データグラムが受信される唯一のアドレスです。

次の C プログラムは、接続先 ( ) 以外のアドレス ( ) からメッセージを受信し、終了するため、UNIX ドメイン ソケット上のconnect/の Linux 実装でのエラーを明らかにしているようです。それとは対照的に、私が期待する動作は、プログラムが終了しないということです。これは、接続先のアドレスからのメッセージが到着しないのを忠実に待つためです。(戻り値のチェックと print ステートメントで例を意図的に混乱させませんでした。これは、 で簡単に調べることができるためです。実際には、呼び出しはさまざまなプロセスによって行われます。)recv@"PWE0"@"STAR"strace

では、Linux [および HP-UX (ファイル システムのパス名を含む)] は仕様に違反しているのでしょうか、それとも何か不足しているのでしょうか?

0 投票する
3 に答える
3083 参照

linux - Linux/Unix ソケット自己接続

クライアントがサーバーに接続しようとすると、クライアントとサーバーが両方とも localhost である場合、自己接続が発生する可能性があります (送信元ポートと宛先ポートがたまたま同じでした)。しかし、私の問題は、クライアントがそのポートをリッスンしていないことです。どうすれば自己接続が可能になりますか?

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

c - msgdr の sys/socket 欠落メンバー: msg_control、msg_controllen、msg_flags

UNIX DOMAIN SOCKETS を使用して、小さなクライアント サーバー アプリケーションを作成しようとしています。

/に を使用してmsghdrいますが、次のコードをコンパイルすると、次のエラーが発生します。sendmsgrecvmsg

エラーメッセージ:

gcc sc -os -lsocket

sc: 関数 `main' 内:

sc:59: エラー: 構造体には「msg_control」という名前のメンバーがありません

sc:60: エラー: 構造体には「msg_controllen」という名前のメンバーがありません

sc:61: エラー: 構造体には「msg_flags」という名前のメンバーがありません

*エラーコード 1

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

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()

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

c - Unix ドメイン ソケット : レイテンシを一定にする

問題の概要: AF_UNIX 安定した送信、バースト受信。

UNIX ドメイン データグラム ソケット経由でデータを受信するアプリケーション B があります。それにデータを送信するピア アプリケーション A があります。A と B の両方が継続的に実行されています (SCHED_FIFO です)。私のアプリケーションAも受信時刻を出力します。

ピア アプリケーション B は、さまざまなタイミングでデータを送信できます (ミリ秒単位でのみ変化します)。理想的には (私が期待すること)、パケットの送信遅延は受信遅延と正確に一致する必要があります。例えば:

ここで、x は一定の遅延です。

しかし、私がBで観察したことを実験したとき:

(w、x、y、z は異なる一定の遅延です)。そのため、送信時刻が指定されている場合、受信時刻を予測することはできません)。

UNIXドメインソケットにバッファリングが関係しているためですか?受信時間が送信時間から予測できるように、問題の回避策を提案してください。1ミリ秒の精度が必要です。

(バニラ Linux 3.0 カーネルを使用しています)

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

c - Unix ソケットを使用して「アドレスは既に使用されています」というエラーが表示される

Unix ローカル ソケットを使用して以下の C ソースを作成すると、アドレスが既に使用されているというエラーが表示されました。詳細情報を確認man 7 Unixした後、プログラムを実行するサブフォルダーを作成しようとしました (明らかにsun_path現在のフォルダーのフィールドを変更します) が、エラーは同じでした。

私を助けることができる人はいますか?

ソースコード: