タグ

programmingとsocketに関するhiromarkのブックマーク (19)

  • はてなブログ | 無料ブログを作成しよう

    【献血デビュー】体重が少し足りず400ml献血はできなくとも、献血ルームでの成分献血ならできたぞ、という話 いきさつ 2025年の抱負として「400ml献血をできるようになる」を掲げてから、冬を越し春が過ぎ夏が終わ………なかなか終わらないな……8月も終わろうとしている。記事を書いた頃の体重からは1kgぐらい増えたところだ。 夏バテなんてどこ吹く風とばかりに、ここ数週間は私の…

    はてなブログ | 無料ブログを作成しよう
    hiromark
    hiromark 2009/01/27
    読んでみようっと。
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    hiromark
    hiromark 2009/01/21
    このまとめは嬉しいな。
  • ネットワークプログラミングの基礎知識

    ネットワークプログラミングの基礎知識 ここでは IP アドレスやポート番号、クライアントとサーバの役割などを説明し、 perl・C言語・Java などでソケット (Socket) を使った HTTP クライアントや POP3 クライアント、簡単なサーバを作成してみます。 要はネットワークプログラミングをやってみよう、ということです。 このページのサンプルプログラムは、RFC などの規格に準拠した「正しい」プログラムではありません。 また、全体的にエラー処理が不十分です (今後改善する予定です)。 あくまでも概要を理解するためのサンプルととらえてください。 もし気でしっかりとしたクライアントやサーバを書きたいなら、このページを読んだ上で、 さらに RFC を熟読し、そして wget・Apache・ftp コマンドなどのソースを参考にしてください。 このページに間違いを見付けたら、掲示板

    hiromark
    hiromark 2009/01/13
    このサイト、めちゃくちゃカバーしている!
  • TCP/IP エラー処理 connect 編

    connect(2) のエラー TCP において connect(2) 呼出し時に発生する可能性のあるエラーは以下の通りです。 タイムアウト RST 受信 EHOSTUNREACH また ENETUNREACH シグナル受信 その他 まず、connect(2) 時の正常な流れをしっかり覚えておいてください。 (connect(2) を呼んで) SYN を送る SYN+ACK が返ってくる (ここで connect(2) から戻る) ACK を送る タイムアウト もし仮に、SYN を送ったものの、相手側から SYN+ACK が返ってこない場合は、 (ローカルの TCP スタックが) しつこく SYN を再送します。何度 SYN を送っても SYN+ACK が返ってこない場合はあきらめてタイムアウトします。 「SYN+ACK が返ってこない」というのは、例えば以下のようなケースが考えられます。

    hiromark
    hiromark 2009/01/13
    Connect 時のエラーハンドリング実装のために。
  • はやいTCPサーバを書く際に忘れがちなこと - kazuhoのメモ置き場

    はやいTCPサーバの書き方 - nyaxtのPC作業ログ で id:nyaxt さんが書いてらっしゃるように、 epoll や kqueue を使う TCP_NODELAY, TCP_DEFER_ACCEPT *1 等を活用する TCP パケットを意識する I/O システムコールの回数を最小にする sendfile といったあたりは、確実にやるべきことだと思います。一方で、TCP 関連以外のオーバーヘッドが実は結構あって、 接続のタイムアウト処理 ログの出力 メモリの確保や解放をやらない あたりにも気を配る必要がある、と思います。 接続のタイムアウト処理については、以前 Kazuho@Cybozu Labs: 高速なCometサーバを書いてみた件 に書いたように、ビットアレイのリングバッファを使うのがベストだと思います。 ログの出力について、複数行を1回のシステムコールにまとめてもいいかど

    はやいTCPサーバを書く際に忘れがちなこと - kazuhoのメモ置き場
    hiromark
    hiromark 2009/01/08
    「TCP 関連以外のオーバーヘッド」は最近少しハマっていたところで、この辺を工夫したら実際かなり改善されました。これは効果アリです (無論、TCP 関連やその後を処理するアルゴリズムがちゃんとしてれば、の話)。
  • Re はやいTCPサーバの書き方 - kazuhoのメモ置き場

    はやいTCPサーバの書き方 - nyaxtのPC作業ログ について、いくつか気になった点があったので。 Nagleアルゴリズムは、相手側のACK送信をまとめてくれるものです。これは、下記の様にアプリケーション側でパケットを意識した処理を行っている場合、邪魔になることがあります。 違うと思います。自分の理解では、Nagle アルゴリズムは、ACK を受信していないデータがある場合に、次のパケットを送信しない、というものです。RFC896 から引用すると、 The solution is to inhibit the sending of new TCP segments when new outgoing data arrives from the user if any previously transmitted data on the connection remains unackn

    Re はやいTCPサーバの書き方 - kazuhoのメモ置き場
    hiromark
    hiromark 2009/01/08
    自分もなんとなくあやふやな部分が残ってたとこなので、このエントリはうれしい。
  • はやいTCPサーバの書き方 - nyaxtのPC作業ログ

    cagra高速化にあたってのノウハウを一部公開してみます。また明日校正/更新します。つっこみ待ちです。 select(2)の代わりにepoll_wait(2), kqueue, /dev/epoll等を使う 他に山ほど解説ページがあるので略 大量のディスクリプタを処理するようなサーバの場合、多少効果があるかもしれません。しかし、クライアント数が少ない場合、劇的な性能の向上は見込めないとおもいます。クライアント数が多い場合は、1セッション1スレッドなモデルではOS側のタスクスイッチングのオーバーヘッドが効いてくることも多いです。クライアント数を増やすには複数のセッションを1スレッドで処理できるようにすると良いです。実装にあたっては、non-blocking ioを活用すると効果的です。 TCP_NODELAYを設定する Nagleアルゴリズムをオフにします。多少応答性が良くなります。 これっ

    はやいTCPサーバの書き方 - nyaxtのPC作業ログ
    hiromark
    hiromark 2009/01/08
    このあたりのパフォーマンス向上って結構大変だけにこういう指標は嬉しい。
  • ミニマルなHTTPサーバ - かそくそうち

    http://0xcc.net/blog/archives/000178.html このコードには長時間動作させる上で明らかにマズい点が二つあります。 (22:58追記: 問題のコードは既に修正されています。高林さん、すばやい対応ありがとうございます。) 「UNIXネットワークプログラミング」の別の節に解説はありますが、コードだけコピペした人が困らないよう指摘しておきます。 一つ目はSIGPIPEシグナルの発生に備えていない点です。 サーバーがレスポンスを返す前にクライアントがソケットを閉じてしまうと、write()がSIGPIPEシグナルを生成することがあります。 SIGPIPEの既定の動作はプロセスの終了なので、この状況が発生しただけでサーバーは勝手に(coreを残さず)終了してしまいます。 通常は次のような関数でSIGPIPEを無視します。 #include <cstring> #i

    ミニマルなHTTPサーバ - かそくそうち
    hiromark
    hiromark 2008/09/30
    結構この辺悩ましいんだよね。。。
  • ithreads でスレッドプール - naoyaのはてなダイアリー

    マルチスレッドなサーバー実装を色々模索していて、Perlithreads で遊ぶ。ithreads は Linux の pthread にリンクさせた perl なら一応 NPTL で動いてくれるので、pthread アプリケーションの設計を試すのにも良い。 試しににやってみたのは、たとえば mod_perl とかで重い SQL でブロックするのが嫌なときとかにそれを別プロセスに丸投げしてやる、その丸投げされる側のサーバー実装。(やりたいことだけに関して言うと、TheSchwartz に似てる) クライアントとサーバーの IPC は UNIX ドメインソケット メッセージングのプロトコルは JSON サーバーはクライアントからのリクエストをバッファリングしたら、SQL を実行する前にクライアントとの接続を切断 この時点でクライアントは制御が戻る サーバーは内部ではフロントエンド /

    ithreads でスレッドプール - naoyaのはてなダイアリー
    hiromark
    hiromark 2007/09/05
    なんか、色んなことの参考になってていい感じ。
  • TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと

    TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと 目次 この文書について C10K 問題 関連サイト まず読むべき I/O フレームワーク I/O 戦略 1. 各スレッドが複数のクライアントを受け付ける. そしてノンブロッキング I/O と レベル・トリガ型の完了通知を利用する. 伝統的な select() 伝統的な poll() /dev/poll kqueue() 2. 各スレッドが複数のクライアントを受け付ける. そしてノンブロッキング I/O と 変更型の完了通知(readiness change notification)を利用する. kqueue() epoll リアルタイム・シグナル fd 単位のシグナル (Signal-per-fd)

    hiromark
    hiromark 2007/03/05
    すばらしすぎ。ネットワークプログラミングするなら必須。
  • Programming UNIX Sockets in C - Frequently Asked Questions

    Created by Vic Metcalfe, Andrew Gierth and other contributers (Transrated into Japanese by: Keisuke Mori)May 21, 1998 この文書は、UNIX 上での ソケットインターフェースを用いた TCP/IP アプリケーションプログラミングについて、頻繁に行われる質問とその 解答を集めたものです。 1. 一般的な情報と概念 1.1 更新情報 1.2 この FAQ について 1.3 この FAQ はどのような人向けでしょうか? 1.4 ソケットって何ですか? 1.5 ソケットはどのように動作するのでしょうか? 1.6 [あるの題名] というのソースコードはどこから取得できますか? 1.7 どこでもっと情報を得ることができますか? 2. クライアントとサーバ(TCP/SOCK_STREA

    hiromark
    hiromark 2007/03/01
    ネットワークプログラミングしてるとハマるところはここを見るべし。
  • ファイル記述子をUnixドメインソケット経由で渡す - bkブログ

    ファイル記述子をUnixドメインソケット経由で渡す Unix 系の多くの OSには、ファイル記述子を別のプロセスに Unix ドメインソケット経由で渡す機能があります。一見、何のために使うのかよくわからない機能ですが、 glibc の nscd はこれをうまく使っています。 nscd (name service caching daemon) は glibc 内で行われる名前関連の問い合わせをキャッシュするサーバです。NIS や LDAP などを用いてネットワークベースでユーザ管理を行っている場合、 getpwuid() などの関数はユーザ名の取得にネットワークアクセスを必要としますが、 nscd を立ち上げておけば、二度目からの同じ問い合わせはキャッシュから得られます。 nscd を立ち上げている GNU/Linux システムでは、キャッシュファイルが /var/db/nscd 以下に作

    hiromark
    hiromark 2006/12/20
    この手は使える。
  • selectよりkqueue,epoll(apache2のススメ) - 最速配信研究会(@yamaz)

    最近3人ほどのエンジニアと話したのだがapache2に対して割とネガティブな意見を持っていた. 曰く「既存モジュールが使えないから」 曰く「スレッドベースってちょっと。。」 曰く「WEBでいい話聞かないから」 3人しか話してないんだけど,3人とも「apache2はスレッドでしか動かない」と思いこんでたようでちょっとおどろいた.apache2でも StartServers 5 MinSpareServers 5 MaxSpareServers 64 MaxClients 100 MaxRequestsPerChild 10000 という設定をすることで今までどおりpreforkモデルで動かすことはできる.preforkモデルだと各種ハンドラもスレッドセーフに無理にすることはないので,わかってて使う分には問題ない. 私がapache2を勧める1番の理由はapache2ではリクエストの多重化処理

    selectよりkqueue,epoll(apache2のススメ) - 最速配信研究会(@yamaz)
    hiromark
    hiromark 2006/11/09
    てか、ネットワークプログラミングのいい勉強になった。
  • bind: Address already in use ソケットの再利用 - higepon blog

    socketを開いて、bindしてacceptして closeした直後に、同一 port を bindしたところ bind: Address already in useというエラーになった。 socketの close ミスかと思ってデバッグしても原因が分からず、いろいろ検索していたら分かった。 デフォルトの動作では、closeしてもしばらくの間ソケットが開放されないらしい。 これを回避するには setsockopt で SO_REUSEADDRを指定する必要がある。 超バッドノウハウ。。。 const int one = 1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int));

    bind: Address already in use ソケットの再利用 - higepon blog
    hiromark
    hiromark 2006/05/21
    昨年の12月頃に同じ問題でハマりました。
  • Xウィンドウとソケット通信1 <米倉達広>

    授業を観たい(Flash版授業コンテンツ)       プログラミング演習�V 課題1 −X-Windowプログラミングとプロセス通信の基礎− 米倉達広 (2007.4.4 last updated) 目次 はじめに  1. X-Windowの基礎知識 2. ウィンドウマネジャとXクライアント    ・・< Short Break 1> 3. X11プログラミングの基的な考え方(ウィンドウを作る) 4. イベント検出 5. ちょっと進んだイベント駆動型GUIプログラム 6. <中間課題> 7. プロセス間通信(ソケットとは) 8. コネクション型ソケットを用いたチャットプログラム  9. コネクションレス型ソケットを用いたチャットプログラム  10. ソケット関連の関数 11. 同期と非同期 12. 非同期通信とselect関数

    hiromark
    hiromark 2006/04/12
    X-Window プログラミングとソケット通信の基本。
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    hiromark
    hiromark 2006/01/05
    Linux のソケットプログラミングでハマるところの解説。こいつは助かる。
  • naoyaのはてなダイアリー - xinetd 経由で SQL をたたくためのデーモン

    Perlネットワークプログラミング―ソケットの使い方からクライアント/サーバーシステムの開発まで を読んでたら Chatbot::Eliza を使った簡単なスクリプトを、inetd 経由で動かしてデーモンとして動かすみたいな話がありました。inetd はその中で、標準入力や標準出力をクライアントとのソケットへ再オープンして、指定されたコマンドをデーモンとして実行するので、標準入出力を扱う簡単なプログラムを修正なしにデーモンとして動かすことができる、といったもの。 ということで、試しに簡単な Hack をしてみました。 #!/usr/local/bin/perl use strict; use warnings; use DBIx::DWIW; $| = 1; my $db = DBIx::DWIW->Connect( DB => 'mysql', User => 'nobody', Pas

    naoyaのはてなダイアリー - xinetd 経由で SQL をたたくためのデーモン
    hiromark
    hiromark 2005/11/30
    手軽なネットワークプログラミングなら Perl も便利そうだなぁ。本格的なのは C でやりたいけど。
  • ひげぽん OSとか作っちゃうかMona- - RawSocketで簡単なパケットモニタを作る方法

    たまにはハッカーっぽく、Binary 2.0っぽい記事を書こう。 Windows 2000/XPでは、RawSocketという仕組みが用意されていて、パケットをかなり自由に受信したり・送信することができます。 RawSocketでは、いわゆる「生パケット」が扱えるのです。 悪い言い方をすると、パケットを覗きみたり、パケットを偽装することも可能ということになります。 以前までは、ドライバレベルでコーディングしないとできなかったようなのですが、WinSock 2.2以降では、これがとても簡単にできます。 今日は、これを利用して簡単なパケットモニタツールを作ってみようと思います。 ビルドは cygwin+mingwです。 大きな流れは以下のとおりです。 Socketの初期化 IPアドレスの取得(必須ではありません) バインド プロミスキャスモードに設定 受信 では1つずつ見ていきましょう 1.S

    ひげぽん OSとか作っちゃうかMona- - RawSocketで簡単なパケットモニタを作る方法
    hiromark
    hiromark 2005/11/24
    おおお、こりゃすげー。
  • 7-4. ネットワークサービスは必ずforkしよう

    このサンプルプログラムは Internet Explorer や Netscape Navigator などのブラウザからアクセスした場合に,画面1のようなWebページをブラウザに返信する。ここでは一般ユーザ権限でサーバを実行させるために,TCP ポート 8080 で簡易 HTTP サーバプログラムを動作させている。そのためブラウザで指定するURLには,":8080" という TCP ポート番号指定が必要である。またサンプルプログラムであるため,出力される Web ページは URL に関わらず固定である。 1 #include "tcpserver.h" 2 #include <stdio.h> 3 4 #define SERVER_PORT 8080 /* サーバ用PORT */ 5 #define SERVER_IP 0x00000000UL /* サーバ用待ち受けIP */ 6 #

    hiromark
    hiromark 2005/09/01
    ネットワークサービスを開発するときの基本事項。
  • 1