問題タブ [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 投票する
0 に答える
340 参照

python - リンクを作成するか、python-mysqlソケットの場所を変更します

PythonでSQLalchemyをテストしているときに、以前にも経験したのと同様の問題に遭遇しました。ただし、今回はmysql-socketパスをMySQLdb接続メソッドに簡単に追加できませんでした。

私のMacでは、mySQLソケットの場所は/opt/local/var/run/mysql5/mysqld.sockです。

上記のパスが明示的に言及されていない限り、mysql-pythonライブラリは/tmp/mysqld.sockを参照します

これにより、sqlachemyがスローされます。

接続メソッドにunix_socket引数を追加してこの問題を解決する前に

私が知りたいのは、MySQLdbライブラリ設定、またはこれらの設定が保存されているファイル(存在する場合)に永続的な変更を加えて、必ずしも追加の引数を追加する必要がないようにする方法です。

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

ruby-on-rails - 104: ピアによる接続のリセット: nginx + rainbows + 1 MB を超えるアップロード

ThreadPool レインボー + nginx (unix ソケット) を実行しています

大きなファイルのアップロードで、nginx エラー ログに次のメッセージが表示されます (アプリケーション ログには何もありません)。

ブラウザーは応答を受け取ります。

なぜこれが起こるのですか?

  • "client_max_body_size 80M;" nginxのhttpとサーバーレベルの両方で(念のため)設定されています
  • nginx は、unix ソケット (アップストリーム ソケット + ロケーション @ proxy_pass) を介してレインボーと通信します。
  • 他のログには何も表示されません。確認しました:
    • レインボーログ
    • 職長ログ
    • アプリケーションログ
    • dmesg および /var/log/messages
  • これは、ファイルをアップロードするときに発生します ~> 1 MB サイズ
0 投票する
1 に答える
1659 参照

php - PHPはどのようにしてローカルソケット接続を正常にシャットダウンできますか...?

テキストのみのUnixドメインソケットを介してローカルCサーバープログラムに接続するPHPクライアントがあります。ただし、正常にシャットダウンできる唯一の方法は、次のコマンドでソケットセッションを終了することです。

Cクライアントのように正常にシャットダウンしたい:-

ただし、PHPには直接ソケットpoll()に相当するものがないようです。PHPにローカルソケットを正常にシャットダウンさせるにはどうすればよいですか?

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

c - telnet セッションのリモートポート番号を取得するには?

リモート ユーザーの telnet 接続で使用される TCP ポート番号を取得しようとしています。

ssh 接続の場合は SSH_CLIENT 環境変数から取得できますが、telnet 接続の場合の取得方法です。それを取得するための C/Unix API はありますか。

次のコードを試しました:

関数は ssh 接続で正常に動作します。しかし、telnet 接続の場合、セッションで使用されるリモート ポート番号を取得できません。

Telnet ケースのログ:

(port_session_connected): getpeername() 成功 (port_session_connected): リモート IP: 0.0.0.0 (port_session_connected): リモート ポート: 0 (port_session_connected): ファミリー: 1 (port_session_connected): getnameinfo() return: 5

getnameinfo() は EAI_FAMILY である err=5 で失敗します /* ai_family はサポートされていません */ Family は AF_UNIX である 1 です。

はい、getnameinfo() は AF_INET と AF_INET6 に対してのみ機能します。

telnetリモートポートを取得するためのAPIまたはとにかくありますか。

ありがとう

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

tcp - Unix ドメイン ソケットと TCP ソケットを使用して接続を確立するコストはどれくらいですか?

奇妙なことに、グーグルでこの情報を見つけられませんでした。Unix ドメイン ソケットと TCP ソケットを使用して接続を確立するコストはどれくらいですか?

現在、再接続にはかなりのコストがかかるため、TCP ソケットを使用して接続プーリングを行う必要があります。Unix ドメイン ソケットに切り替えて接続プールを取り除くだけで、クライアントを単純化できるのではないかと考えています。

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

perl - Perl IO::Socket::UNIX Connect でタイムアウトすると EAGAIN/EWOULDBLOCK が返される

Ubuntu Linux、2.6.32-45 カーネル、64b、Perl 5.10.1

多くの新しい IO::Socket::UNIX ストリーム ソケットをサーバーに接続しましたが、ほとんどの場合、正常に動作します。ただし、より高速なプロセッサでスレッド化された環境では、「リソースが一時的に利用できません」(EAGAIN/EWOULDBLOCK) が返されることがあります。Connect でタイムアウトを使用しているため、接続中にソケットが非ブロック モードになります。しかし、私のタイムアウト期間は発生していません-目立った時間は待たず、すぐに戻ります。

IO::Socket 内で接続を試行し、EINPROGRESS または EAGAIN/EWOULDBLOCK で失敗した場合は、書き込みビットが設定されるのを待つために選択を行うことがわかります。これまでのところ、これは正常なようです。私の場合、選択はすぐに成功し、書き込みビットが設定されていることを意味し、コードは再接続を試みます。(これは、エラー スリッページによって何らかのエラーを取得しようとする試みなのでしょうか?) とにかく、再接続は EAGAIN/EWOULDBLOCK で再び失敗します。

私のコードでは、これは再試行ループで簡単に修正できます。しかし、ソケットが書き込み可能になると、ソケットが再接続できない理由がわかりません。非ブロッキング接続には常にセレクトガードで十分だと思いました。どうやらそうではありません。私の質問は次のとおりです。

  • 選択が機能する (書き込みビットが設定される) ときに接続が失敗する原因は何ですか?
  • 接続が成功するのを待つために、スピンして再試行するよりも良い方法はありますか? 回転は無駄なサイクルです。代わりに、選択/ポーリングなどでブロックしたいのですが、それでもタイムアウトが必要です。

ありがとう、

-- スティーブ

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

linux - デーモンを使用した Linux IPC 複数クライアント

これは本当に基本的なことですが、私は今ブランキングしています。

デーモン プロセスがあり、複数のクライアントがデーモン プロセスと通信できるようにしたいと考えています。クライアントが起動してから、共有ライブラリを使用して、基本的にデーモンプロセスに「登録」できるようにしたいと考えています。デーモン プロセスは、この新しいクライアント用にスレッドを生成し、クライアントと新しいスレッド間の通信パイプを提供します。

すべてのクライアントが最初に使用する「登録チャネル」としてUNIXデータグラムソケットを考え、次にクライアント固有のチャネルに切り替えますが、アプリオリに設定せずに新しいデータグラムソケットに一意の名前を作成する方法を理解できません.

  • サーバーとクライアントは同じマシン上にあり、ストリームをパケットに分割する必要がないように、データグラム ソケットを使用することを好みます。
  • (非常に) 高速な小さなメッセージを送受信します。
0 投票する
3 に答える
4564 参照

c - Unix C ソケット サーバーが接続を受け付けない

これが取り引きです。接続を受け入れることができない単純なtcpソケットサーバーをCで(UNIXシステムコールを使用して)書いています。

私が知る限り、サーバーの初期化は問題なく完了しますが、印刷したポート (以下のコードを参照) に接続しようとすると、何もないかのように拒否されます。

さらに言えば、そのポートは使用されていません。私は現在のセットアップでエラーを投げていません。私はすべてアイデアが枯渇しています。

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

c - UNIXドメインソケットを使用して個別のメッセージを書き込む

私は現在、UNIXドメインソケットを使用してプログラミングすることを学んでいますが、それについて質問があります。メッセージを分離する標準的な方法は何ですか?たとえば、サーバーは2つのメッセージを書き込み、クライアントはメッセージを取得するために2つの読み取りを行う必要があります。各メッセージの最後に常に特定のcharシーケンスを追加することで、独自のプロトコルを「定義」できると思いますが、これは正しくないようです。null文字は、ソケットに書き込むときに破棄されるようです。特に次の2時間以内に来る場合は、いくつかの説明に本当に感謝します:D。

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

haskell - Haskellでhedisを使用してUnixドメインソケット経由でredisサーバーに接続するには?

ハック ページで宣伝されているように、 hedis使用して Unix ドメイン ソケット経由で redis サーバーに接続する方法を探しています。

TCP または Unix ドメイン ソケット経由で接続する:
TCP ソケットは、Redis サーバーに接続するための既定の方法です。同じマシン上のサーバーへの接続の場合、Unix ドメイン ソケットは、標準の TCP 接続よりも高いパフォーマンスを提供します。

のコンストラクターからConnectInfo、 と同様に、をdefaultConnectInfo埋める必要があるようです。ただし、形式などの詳細なしで、のみが表示されます。connectPortPortIDUnixSocketUnixSocketString

connectPortでは、 Unix ドメイン ソケット経由で接続するには、どのように入力すればよいでしょうか? ありがとう。


更新:試してみたところ、それほど難しくないことがわかりました。以下は私のハローワールドです。