ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

ポート番号

2007-06-16 21:51:32 | PG(ソケット通信)

TCPのポート番号って、自分のシステム内部でしか使わないサーバーでは どのポート番号を使えばいいのか、いまいち分からないなー。

ま、HTTPのデフォルトが80ということだけはたぶん間違いないだろう(笑)

コメント

WinSockのshutdownのhow

2006-10-18 21:32:08 | PG(ソケット通信)

ソケット通信のshutdown()では、送信・受信のいずれをシャットダウンするかを指定する。
UNIXではSHUT_RD・SHUT_WR・SHUT_RDWRだというのは知っていたんだけど、WinSockでのマクロは知らなかった。
んだけど、それがSD_RECEIVE・SD_SEND・SD_BOTHだというのを今日知った。

つーか、関数名はほとんど全く同じなのに、なんでこういうマクロだけ違う名称になってるんだ(苦笑)

コメント

winsockのWSAStartupはDllMainから呼び出していいのか?

2006-07-27 20:35:36 | PG(ソケット通信)

winsockを使って通信をするサンプルを作る為に自分のウェブページのソースをコピペしてみたら、コンパイルエラーになる部分があったので修正。
(rmaskの「r」が全角文字になってたとか、soc+1はキャストが必要とか、インクルードするヘッダーはwinsock.hじゃなくてwinsock2.hの方がいいとか(爆))


ところで、今回はこれをDLL化しようとしたんだけど、winsockの場合は他の言語のライブラリと違って最初に一回だけWSAStartupで初期化し、最後にWSACleanupでクリーンアップしなければならない。

DLLの場合、ロード時や終了時にDllMainが呼ばれ、その第二引数の値によって どの時点で呼ばれたかが分かる。
なので、DLL_PROCESS_ATTACHで呼ばれたときにWSAStartupし、DLL_PROCESS_DETACHで呼ばれたらWSACleanupをすればちょうどいいじゃん!
と思ったんだけど。

マイクロソフトのSDKのページ.NETとの混在DLLのページにある制限事項を見ると、DllMainでは別DLLをロードしたり解放したりするようなことは禁止であり、問題が発生しうる例としてソケット関数呼び出しがバッチリ挙げられていた(泣)
自分で試した限りではとりあえず動いたし、DllMainでWSAStartupを呼び出している例もウェブ上で見かけたが…いいんだろうか。WSAStartupがDLLをロードしていなければたぶん大丈夫だと思うけど、どうなんだろう?
(たぶん、「絶対ロードしない」とは言い切れないだろうな~)

コメント (1)

リスニングソケットがFINを投げるか?

2006-07-05 04:55:11 | PG(ソケット通信)

なんとなく自分のTCP/IPのメモを見ていたら、おかしなところを発見。

ソケットをクローズするときに「リスニングソケットがFINを投げる」と書いてあるが、これは「接続済ソケット」の間違いでしょ(汗)
リスニングソケットは接続を待ってるだけなんだから、誰に対してFINを投げるっちゅーねん!

コメント

ソケット通信ちょびちょび

2006-05-17 02:43:04 | PG(ソケット通信)

なにげなく自分の書いたソケット通信のメモを見ていたら、ちょっと間違いを発見。

クライアントからのconnectは、サーバーがlistenしてさえいれば、acceptしなくても成功するんだよねー。

あと、ブロッキングについてのメモを追加。

その他、語尾とか曖昧な表現とか気になったところをちょびちょび修正。

コメント