Linux カーネル 3.6 では TCP Fast Open (TFO) という機能がマージされたそうです。詳しくは以下の URL に記載がありますが、一度接続したクライアントは TCP の 3way-handshake を簡略化してコネクションをオープンできる(SYN にデータを載せられる)という機能のようです。 TCP Fast Open: expediting web services [LWN.net] 面白そうな機能なので実際に使ってみて、使い方をまとめてみました。 準備 カーネル kernel 3.6 ではまだクライアント側の機能しかマージされていないので、さらに新しいカーネルを使います(3.7 でサーバ側の機能もマージされるようです)。今回は git で取ってきた最新 (12250d843e8489ee00b5b7726da855e51694e792) をビルドして使いまし
Redis コア開発者 @pnoordhuis のツイートで Unix ドメインソケットに abstract socket address なるソケットアドレスがあることを知る。 ということで Unix ドメインソケットのソケットアドレスの種類を調べてみた。 ソケットアドレスの種類 Unix ドメインソケットでは大きく分けて次の3種類のアドレスで通信できる。 ファイルシステムパス名(pathname) 無名(unnamed) 抽象名前空間(abstract) 1. ファイルシステムパス名 一番一般的な手法。sun_path にファイルシステム上のパスを指定する。 ファイルシステム上にファイルを作成しているので、ソケット通信の際にもファイルシステムのパーミッションなどの制約がそのままつきまとう。 サーバプロセスが終了するときには、ソケットファイルを unlink(2) するのがお作法 pat
改造Firefoxで日米間6.5GbpsのWebアクセス。東大が世界最速達成 -BB Watch より。私は 1Gbps 以上の世界は完全に未知の世界なので、今回の記事は「どうやって 6.5Gbps ものデータ転送速度を達成するか」ではなく「何故、改善前は(そんな高速ネットワーク環境下で) 6Mbps 程度のデータ転送速度しか出せないのか」と言うお話です。 TCP のデータ転送(ダウンロード)では、ソケットバッファの値を弄っただけで劇的にデータ転送速度が改善される場合があります。 ソケットバッファとは? あるサーバ/クライアント間でデータ通信をする際、パケットが、受信ホストに到着するタイミングと(受信ホストの)アプリケーションが、到着したパケットを読み込むタイミングは非同期です。そのため、パケット(データ)は到着したのだけれどアプリケーションがまだ読み込みに来てくれないと言う場合に、そのデ
Linux Unixドメイン(PF_UNIX, AF_UNIX, PF_LOCAL, AF_LOCAL)のSOCK_SEQPACKETについて、検索してもひっかからないしかわいそうなので違いをまとめてみた。"man unix"をみるとSOCK_SEQPACKETは『kernel2.6.4以降で利用できる』と書いてあるので要注意。以下 Linux kernel 2.6.25.10 のソース (net/unix/af_unix.c) より。 kernel内部で呼ばれる関数の違い func unix_stream unix_dgram unix_seqpacket connect unix_stream_connect unix_dgram_connect unix_stream_connect accept unix_accept sock_no_accept unix_accept poll
Jun-ichiro itojun Itoh, KAME Project $Id: index.html,v 1.3 2003/05/16 15:42:36 itojun Exp $ Introduction By deployment of Internet Protocol Version 6 (IPv6), the application programmers has to cope with socket connection with multiple address families, i.e. AF_INET and AF_INET6. The document describes how a programmer can handle those multiple address families at ease. This document assumes that y
ソケットプログラミングをする際にアドレスファミリから独立したコードを書いておくことで、 本格的に IPv6 環境に移行したときにプログラムの書き換えが不要になるうえ、 IPv4、IPv6 の両方の環境で動作するようになります。 なお、以下の説明は FreeBSD 5.0-RELEASE および gcc 3.2.1 の環境で行っています。 ソケットプログラミング 簡単に IPv4 ソケットプログラミングをおさらいします。 IPv4 ソケットプログラミングで TCP サーバおよびクライアントプログラムを書くと、例えば、以下のようになります。 以下のコードでは、サーバ(sv4.c)は引数で指定されたポートでクライアントからの接続を待ちます。クライアントから接続されると "Hello!" の文字列と改行をクライアントに送信し、接続を終了します。一方、クライアント(cl4.c)は引数で指定された
SO_LINGER の秒数を 0 にしてソケットを閉じればいい。Perl で書くなら以下のような感じ。 setsockopt($sock, SOL_SOCKET, SO_LINGER, pack("II", 1, 0)) or die $!; $sock->close() 一方で RST によって切断 (=異常切断された) かどうかはソケットからの読み込みが ECONNRESET エラーを返すかどうかで判断できる(正常切断なら 0 (==EOF) が返る)。
When you need to send small data packets over TCP, the design of your Winsock application is especially critical. A design that doesn't take into account the interaction of delayed acknowledgment, the Nagle algorithm, and Winsock buffering can drastically affect performance. This article discusses these issues by using a couple of cases studies. It also derives a series of recommendations for send
Developerweb | Bocoran iPhone 16 Series: Inovasi Kamera dan Warna Baru, Jelang peluncuran yang diperkirakan akan berlangsung pada September 2024, berbagai bocoran mengenai iPhone 16 series mulai ramai beredar di internet. Informasi terbaru mengungkapkan beberapa peningkatan signifikan, terutama pada sektor kamera dan pilihan warna yang lebih menarik. Inovasi Kamera Ultrawide 48MP Sejak peluncuran
ちょっと必要になってソースアドレスを指定する送信関数ってのを書いたんで載せます. 基本的に処理を端折ってるところはそんなにないと思うんですが, cmsgだけは簡単に済ませてあります. sendmsgの制御メッセージは,本当は複数個同時に設定できるのですが, こればっかりは実際に複数個オプションを設定する必要がでないとどうしようもないのでとりあえず放っておきました. 実際は,ひとつのバッファに順番に並べていかなければいけないので,バッファサイズの設定とか,cmsgのポインタ移動とかいろいろしないといけません. まあ、man cmsgして見てみてください. #include <sys/socket.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> /** * @brief
UDPブロードキャスト送信サンプル setsockopt()を利用してソケットに対してSO_BROADCASTを設定すると、ブロードキャストパケットを送信できるようになります。 この設定を行わずにブロードキャストパケットを送ろうとすると、sendto()が失敗してしまいます。 #include <winsock2.h> int main() { WSAData wsaData; SOCKET sock; struct sockaddr_in addr; BOOL yes = 1; WSAStartup(MAKEWORD(2,0), &wsaData); sock = socket(AF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons(12345); addr.sin_addr.S_un.S_add
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く