(2006.8.5 ページを独立。) C/C++でのIPv6ソケットプログラミングについて。 ソケットについてはすでに掃いて捨てるほど解説サイトがあるが、IPv6に対応した、しかもポータブルな書き方を紹介しているところは見当たらなかった。 目次: サーバを作る クライアントを作る IPv6, IPv4を区別するサーバ @ サーバを作る まず、ソケットでIPv4あるいはIPv6クライアントからの接続を受け付けるプログラムを作ってみる。Fedora Core 5 Linuxで試した。 IPv4 onlyのときの典型的なコードは、次のようになる。※現代ではこのように書いてはいけません。 /** * TCP で listen する. IPv4 only. 実コードで使用不可! * * @param node bind() するホスト名. NULL の場合 INADDR_ANY. * @param
ここでは、Linuxを使ったネットワークプログラミングの説明を行いたいと思います。 ここで対象としている読者は、ネットワークプログラミング初心者(もしくは入門者)かつLinux環境でプログラミングを行いたい人です。 開発環境としては、C言語+gccを想定しています。 説明内容は主にソケットプログラミングになります。 なお、C言語そのものが初めての方は「C言語入門」も参考にどうぞ。Windows専用には書いてませんが主にC言語で共通の部分を解説しています。 コードを書く前の準備 まず、gccを使える状態にしないといけません。 ディストリビューションにもよりますが、Linuxを普通にインストールしただけでは開発環境は入りません。 開発環境を用意するためには、gccやglibcなどのrpmを必要に応じてインストールしてください。 次に、エディタが必要になります。 mule、emacs、xemac
cagra高速化にあたってのノウハウを一部公開してみます。また明日校正/更新します。つっこみ待ちです。 select(2)の代わりにepoll_wait(2), kqueue, /dev/epoll等を使う 他に山ほど解説ページがあるので略 大量のディスクリプタを処理するようなサーバの場合、多少効果があるかもしれません。しかし、クライアント数が少ない場合、劇的な性能の向上は見込めないとおもいます。クライアント数が多い場合は、1セッション1スレッドなモデルではOS側のタスクスイッチングのオーバーヘッドが効いてくることも多いです。クライアント数を増やすには複数のセッションを1スレッドで処理できるようにすると良いです。実装にあたっては、non-blocking ioを活用すると効果的です。 TCP_NODELAYを設定する Nagleアルゴリズムをオフにします。多少応答性が良くなります。 これっ
SSL 通信用のライブラリを追加しようと少し調べたところ,OpenSSL ライブラリを使うのがやはり王道っぽいので OpenSSL を使って実装してみました. gcc gcc を使う環境 (Linux, cygwin, ...) だと大抵の場合は最初からインストールされているようです.ない場合は,ソースコードをダウンロードして make するか,apt-get install とか適当なコマンドでインストールするとすんなり入るだろうと思います.コンパイル時には,crypto と ssl をリンクする必要があるようです. g++ -Wall -o test example_ssl.cpp -lcrypto -lssl VC++ Windows 版は,Shining Ligth Productions - Win32 OpenSSL からバイナリをダウンロードすることができるようです.Ligh
OpenSSL を使用しているときに複数のソケットの入力状況を管理する場合,通常の socket と同じように select や epoll を用いて制御を行うとうまくいかないときがあります. SSL のような暗号通信の場合、送信は「垂れ流し」では済まず、ハンドシェークを行なう必要があるからだが、この時、受信しようと思っていなかったデータ、つまり通信相手が送信したデータまで読み込んでしまう場合がある。 すると、SSL_write を呼んでいるのに、 OpenSSL の受信バッファに、意図せずデータが溜まってしまう。こうなってしまうと、select(2) や epoll(2) では検知できない。 select(2) や epoll(2) は、 I/O レベルでの受信データの有無を調べるシステムコールであり、それより上のレベルである OpenSSL ライブラリの受信バッファのことは関知しないか
本稿では、Adobe AIRを使って簡単なアプリケーションを作るまで過程を紹介します。注目の技術、Adobe AIRで何ができるのか、どうやって開発するのかを解説していきます。 Adobe AIRとは? 今後、最も期待している技術は何かと5つあげていくと、その中に必ず入るのが、「Adobe AIR」です。Adobe AIRは、アドビシステムズが開発したデスクトップアプリケーションの実行環境です。 AIRが面白いのは、これまで使ってきたWebアプリケーションの技術、HTML/JavaScriptやFlash/Flexを利用して、デスクトップアプリケーションを作ることができる点にあります。もし、これまでに、HTMLやFlashで何か作ったものがあれば、それを、簡単な作業で、デスクトップアプリケーションとして公開することができるのです。ちょっと手を加えるだけで、Webで動くアプリケーションと、デ
Created: Kazuki Ohta, 2006/04/17 Last Update: Kazuki Ohta, 2006/06/14 学校の課題(OS演習)で、open, read, write, close等のシステムコールを使用した課題が出された。システムコールなので当然失敗する事が有り、エラーチェックを正しく行う必要が有るのだが、writeについてはweb上に有る資料も使い方を間違っているモノが多かった。僕も課題では間違えて再提出をくらってしまった。なので、ここにwriteシステムコールの正しい使い方を書き記しておく。 まずは $man 2 write の一部を抜粋してみる。 NAME write - write to a file descriptor SYNOPSIS #include ssize_t write(int fd, const void *buf, si
BASP21ソケットオブジェクト BASP21 DLL ソケットオブジェクトは、ASPの VBScript やVisual Basic、EXCEL VBA WSH(Windows Scripting Host)などから使えるTCP/IP通信をサポートするコンポーネントです。 ●Connect(dest,port[,timeout]) : コネクションを確立 ●Read(data[,mode]) : データを受信 ●ReadLine(data) : データを行単位で受信 ●Write(data) : データを送信 ●WriteHex(data) : データを16進で送信 ●Close() : 接続のクローズ ●data=Read2([mode]) : データを受信 JScript対応 ●data=ReadLine2() : データを行単位で受信 JScript対応 BASP21 ソケットオブ
昨年から今年に話題になったWinny。ちょっといまさらな気もしますがWinnyの通信の可視化にトライしてみました。 Winnyの暗号化方式はあちらこちらで解析もされ、暗号化方式もRC4を使っているということで情報を探しながらスクリプトを作ってみたところ、とりあえずキー情報を交換するクエリ通信(クエリ送信)の内容の可視化に成功。 #こうして見てみるとやっぱりエロコンテンツがほとんどなんですねぇ笑 スクリプトをいちから作ると疲れるので、shagさんという方が作成したwinny_scanner.plというスクリプトを利用することにしました。このソフト自体は最初にポートスキャンをして、開いているポートがwinnyかどうかをチェックし、winnyであればIPアドレスとポートを表示するものだそうだ。 このスクリプトを読んですこし調べてみると、winnyは最初に接続したときRC4の共通鍵を送っていて、こ
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
このサンプルプログラムは 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 #
Anonymous Coward曰く、"「OpenWinny」という名のソフトウェアが公開されている。使ってみたところ次のような動作をするようだ。まず最初に、オリジナルのWinnyと同様に、接続待ち受け用ポート番号と、最初に接続するWinny稼動コンピュータのIPアドレスとポート番号(ノード)の設定をする。すると、それらのノードに順次接続し、新たなノードを探し出して「ノード情報」の画面に一覧表示する。ここで、オリジナルのWinnyがノードのホスト名(FQDN)をあえて表示しないようにしているのと違って、OpenWinnyはそれを表示するところが特徴となっている。 そして、クリックで一つのノードを選択すると、そのコンピュータが送信可能化しているファイルの一覧(全部とは限らない)が右の枠に表示されるようになっている。 検索機能も用意されており、キーワードを入力して「検索」ボタンを押すと、ファイ
TCP/IP の基礎概念、アプリケーション・プロトコルについての概説、ネットワーキングにおける拡張概念とインフラストラクチャーの傾向について説明しています。
/procによるLinuxチューニング [後編] ~ /proc/sysの主要パラメータ群総解説 ~ 遠田 耕平 2002/12/17 /proc/sys/fsディレクトリ /proc/sys/fsには、ファイルシステム関連のチューニングパラメータが集められています。 file-max システム中のオープンファイル管理データの最大数を指定できます。 file-nr file-nr内のパラメータはそれぞれ、オープンされているファイル数、空きファイル管理データの数、システム中のオープンファイル管理データの最大数(file-maxと同じ)を示します。 ファイルのクローズ時には、使っていたファイル管理データを即座に解放するのではなく、いったん(次の機会に使えるように)取り置きます。この取り置かれている管理データの数が、2番目の数値となります。 inode-state、inode-nr inode-
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く