google-code-prettify

2006-09-26

connect(2)でEADDRNOTAVAILを返している個所

connect(2)で接続先ポート番号が0の時にEADDRNOTAVAILが返るのだが、このエラーを返している個所を調べた。

connect(2)を呼ぶと、まずsys_connect()が呼ばれる。sys_connect()はsys/kern/uipc_syscalls.cにある。

if ((error = getsock(p->p_fd, SCARG(uap, s), &fp)) != 0)
return (error);
...
so = (struct socket *)fp->f_data;
...
error = soconnect(so, nam, l);

sys_connect()ではgetsock()でsocketを取得。そのsocketをsoconnect()へ渡している。

soconnect()はsys/kern/uipc_socket.cにある。

error = (*so->so_proto->pr_usrreq)(so, PRU_CONNECT,
(struct mbuf *)0, nam, (struct mbuf *)0, l);

で、プロトコル(so_proto)に応じたusrreq関数を呼んでいる。TCPの場合はtcp_usrreq()が呼ばれる。

tcp_usrreq()はsys/netinet/tcp_usrreq.cにあり、

case PRU_CONNECT:
...
error = in_pcbconnect(inp, nam, l);

と、in_pcbconnect()を呼んでいる。

netinet/in_pcb.cのin_pcbconnect()で、

if (sin->sin_port == 0)
return (EADDRNOTAVAIL);

とEADDRNOTAVAILを返している。

本当はgetsock()あたりで、__linkset_add_dataや__linkset_foreachなどおもしろいことが行われているのだが、それはまたいつか書こう。

ところで、uipcとpcbって何の略だろう?
この辺の略語は、どうやって調べたらよいのやら。

2006-09-20

XenのdomUにdebianをインストールする方法

1からインストールするなら、Create a Debian VM with debootstrap
イメージファイルが欲しいなら、Jailtime.org: Virtual filesystems for Xen。またはxen-get
via port-xen@netbsd

TSVNで複数ファイルのkeyword展開をセットする

複数のファイルを選択した状態でプロパティダイアログを開くと、プルダウンメニューからsvn:keywordsを選ぶ事ができない。

でも実は、プルダウンに無い物でも手で入力できる。
via TSVN ML

2006-09-19

webdavクライアントのNetDriveをインストール

オンラインストレージとしてbox.netを使い始めたのだが、windowsのエクスプローラからのアクセスだと、ファイルのアクセスがうまく行えない。
しかたないので、windows用のwebdavクライアントとしてNovellのNetDriveを使う事にする。

NetDriveはなぜかNovellのサイトからはdownloadできないので、他サイトから取得。
今の所、NetDriveとbox.netの組み合わせで、問題なく動作している。

2006-09-12

Altiris SVSを使うとcygdriveが見えない

Altiris SVSで仮想レイヤーを使っていると、bashからls /cygdrive/cが失敗する。
$ ls /cygdrive/c/
ls: reading directory /cygdrive/c/: No such file or directory
調べたら、今ちょうどforumで話題になっていた。
ちょっと待つか…

2006-09-06

google syncするとseparatorが増える

Firefoxのbookmarkにseparatorを使っていると、google syncした時にseparatorが増える事がある。
なんとかならないのかな。これ。
他の人はあまりseparatorを使っていないのだろうか。

オンライン辞書にこんな学習支援機能が欲しい

オンライン辞書にこんな学習支援機能があったら嬉しい。
  • 過去に調べた事がある単語の意味を定期的にメールで送ってくれる。
  • そのメールには以下の2つリンクがある。
    1. 意味を覚えていた
    2. 意味を忘れていた
  • 覚えていたをクリックすると、その単語がメールで送られてくる頻度が下がる
  • 忘れていたをクリックすると、その単語がメールで送られてくる頻度が上がる
他とかなりの差別化ができると思うのだけど、どこかが実現してくれないだろうか。

blobとは

NetBSD MLで「blob」という単語がよく出てくるのだが、辞書で調べても全然意味が通じない。
ふとwtfで調べてみると、

bash-3.00$ wtf blob
BLOB: binary large object

そうか。どうりで普通の辞書で調べても意味が通じなかったはずだ。

ちなみにwtfとは、

bash-3.00$ wtf wtf
WTF: {what,where,who,why} the fuck

2006-09-05

pkgsrcのデフォルトのpythonのバージョンを変える

pkgsrcで使うpythonのバージョンは、pkgsrc/lang/python/pyversion.mkで

PYTHON_VERSION_DEFAULT?= 23

のように指定されている。
2.4でpkgsrcをビルドしたいなら、mk.confに

PYTHON_VERSION_DEFAULT=24

と書いておけば良い。
(現在のpkgsrcでのデフォルトバージョンは既に2.4になっている)

2006-09-04

windowsのvimでGNU globalを使う方法

windowsのvimでGNU globalを使う方法。
  1. GNU Globalのサイトからwindows版のzipをdownloadしてインストール
  2. zipに含まれるgtags.vimを、vimfiles/plugin/に置いておく
  3. gtags.vimの44行目を
    "let stuff = system(cmd . '>' . tmpfile)
    から
    call system(cmd . '>' . tmpfile . "& exit")
    のように書き換える

gtagsの書き換え方法は、global MLのログより。
vimwiki.netに書いてある方法でも行けるが、一瞬DOS窓が開くのが見えてしまう。