ネットワークプログラミング相談室 Port13
レス数が1000を超えています。これ以上書き込みはできません。
Programming UNIX Socket FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html
Winsock Programmer's FAQ (日本語訳)
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/
過去スレ:
Port12 http://fun.kz/test/read.cgi/tech/1102427855/ ☆新タイプミラー
Port11 http://fun.kz/test/read.cgi/tech/1096187183/ ☆新タイプミラー
Port10 http://fun.kz/test/read.cgi/tech/1090385857/ ☆新タイプミラー
Port9 http://fun.kz/test/read.cgi/tech/1080658835/ ☆新タイプミラー
Port8 http://pc5.2ch.net/test/read.cgi/tech/1073560271/ ★行方不明
Port7 http://pc5.2ch.net/test/read.cgi/tech/1063035045/ ★行方不明
Port6 http://pc5.2ch.net/tech/kako/1052/10521/1052106444.html
Port5 http://pc2.2ch.net/tech/kako/1040/10402/1040220302.html
Port4 http://pc3.2ch.net/tech/kako/1034/10342/1034236536.html
Port3 http://pc3.2ch.net/tech/kako/1023/10233/1023359282.html
Port2 http://pc.2ch.net/tech/kako/1006/10062/1006258198.html
Port1 http://pc.2ch.net/tech/kako/970/970344582.html
関連リンクは>>2-10辺り
足りなかったら適当に付け足してね
0002デフォルトの名無しさん
05/03/03 05:07:05UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
http://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
詳解TCP/IP〈Vol.1〉プロトコル
http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
The Implementation (TCP/IP Illustrated, Volume 2)
http://www.amazon.co.jp/exec/obidos/ASIN/020163354X/
Linuxソケットプログラミング―ネットワークプログラミングにおける実践技法
http://www.amazon.co.jp/exec/obidos/ASIN/4894714671/
TCP/IPによるネットワーク構築〈Vol.3〉―クライアント‐サーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320028007/
Webプロトコル詳解―HTTP/1.1、Webキャッシング、トラフィック特性分析
http://www.amazon.co.jp/exec/obidos/ASIN/4894715414/
WinSock2.0プログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
猫でもわかるネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4797323604/
IPv6ネットワークプログラミング
http://www.amazon.co.jp/exec/obidos/ASIN/4756142362/
0003デフォルトの名無しさん
05/03/03 05:08:28TCP/IPによるネットワーク構築〈Vol.1〉原理・プロトコル・アーキテクチャ
http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/
今までに出てきたURL抜粋
RFC 日本語版リスト
http://www5d.biglobe.ne.jp/~stssk/rfcjlist.html
C10K ヘヴィーロードサーバ
http://www.kegel.com/c10k.html
JPNIC RFC関連リンク集
http://rfc-jp.nic.ad.jp/link/
RFC 2616 "Hypertext Transfer Protocol -- HTTP/1.1" 日本語訳
http://www.studyinghttp.net/rfc_ja/2616/rfc2616_ja.html
IANA Well known port numbers
http://www.iana.org/assignments/port-numbers
MSDN
http://msdn.microsoft.com/library/en-us/dnsitehelp/html/tochelp.asp
ツール類
tcpdump
http://www.tcpdump.org/
Windump
http://netgroup-serv.polito.it/netgroup/tools.html
pathchar
ftp://ftp.ee.lbl.gov/pathchar/
pchar
http://www.employees.org/~bmah/Software/pchar/
0004デフォルトの名無しさん
05/03/03 05:15:15TCP/IPによるネットワーク構築〈Vol.1〉原理・プロトコル・アーキテクチャ
http://www.amazon.co.jp/exec/obidos/ASIN/432012054X/
★ツール
Packetyzer
http://www.networkchemistry.com/products/packetyzer/
ethereal
http://www.ethereal.com/
★プログラミング
Raw IP Networking FAQ
http://www.whitefang.com/rin/
★規格
RFC Editor
http://www.rfc-editor.org/
HTMLなRFC (セクションを直に示すのに便利)
http://www.freesoft.org/CIE/RFC/
- Randomness Recommendations for Security
http://www.faqs.org/rfcs/rfc1750.html
★プロトコル
TTCP
http://www.sean.de/Solaris/ttcp.html
http://www.kohala.com/start/ttcp.html
★IP, TCP実装
http://www.iti.fi/documentation/miniip.html
http://www.sics.se/~adam/uip/
http://www.codeguru.com/Cpp/I-N/network/tcpip/article.php/c5447/
http://www.geocities.jp/bruce_teller/security/garakuta.htm
★その他
パタリロ〜クックロビン音頭〜
http://www.fileup.org/file/fup2930.mp3
通報
http://www.cyberpolice.go.jp/
0005デフォルトの名無しさん
05/03/03 05:17:12http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?BoostSocket
The Code Project - Internet & Network programming
http://www.codeproject.com/internet/
問題ありのサイト?
ネットワークプログラミングの基礎知識
http://X68000.q-e-d.net/~68user/net/
0006デフォルトの名無しさん
05/03/03 07:53:01接続できる最大のクライアント数はFD_SETSIZEで定義される数ですか?
0007デフォルトの名無しさん
05/03/03 10:47:49プログラム的にはそうだけど、OS的には別
0008デフォルトの名無しさん
05/03/03 10:50:470009デフォルトの名無しさん
05/03/03 11:25:160010デフォルトの名無しさん
05/03/03 13:36:43OSも関係あるんじゃなかったっけか。
WinXPだったら10クライアントまでだっけか。
Linuxだったら無制限だっけか。
0011デフォルトの名無しさん
05/03/03 13:48:23それはライセンスの話で、ソケット的な制限があるわけではない。
それにLinuxだってソケット的に無制限なわけないでしょ。
どうチューニングしようと、カーネルメモリを使い果たしたら終り。
0012デフォルトの名無しさん
05/03/03 14:28:4810人以上接続できるやつを作っても10人しか接続できないものだと
今までずっと思ってた。
メモリは詳しくないから分からん。
むしろ「カーネル」のつくものはカーネルおじさんしか知らない。
勉強してきますorz
0013デフォルトの名無しさん
05/03/03 14:34:47の事を言ってるんだろうな
0014デフォルトの名無しさん
05/03/03 23:26:540015デフォルトの名無しさん
05/03/04 00:29:45TCP/IPによるネットワーク構築〈Vol.3〉
Linux/POSIXソケットバージョン―クライアントサーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/
TCP/IPによるネットワーク構築〈Vol.3〉
クライアントサーバプログラミングとアプリケーション―Windowsソケットバージョン
http://www.amazon.co.jp/exec/obidos/ASIN/4320029992/
0016デフォルトの名無しさん
05/03/04 22:00:05どうやって覚えるのがベストなのさ?
0017デフォルトの名無しさん
05/03/04 22:02:25とにかくやれ
0018デフォルトの名無しさん
05/03/04 22:02:58UNIXでの名前を再定義しているだけだ。
実はUNIXのコードがほとんどそのまま使えたりする。
close()をclosesocket()に変えるぐらいか。
0019デフォルトの名無しさん
05/03/04 22:05:17コマンドラインならすぐできるでしょ。
0020デフォルトの名無しさん
05/03/04 22:09:37Winsockを使ったアプリケーションは今までに3回くらい作ったけど、
全然頭の中に残らないんさorz
winsockはC/C++で使ってるが、ん・・・。
WINAPIならサクサク入ってくるんだけどなぁ。
この際暗記的に覚えるしかないか。
0021デフォルトの名無しさん
05/03/04 22:13:24ネットワークは抽象的だから。
>>1のFAQを何回も読め。>>15も読んだ方がいい。
これを克服すると一つレベルアップ。
0022デフォルトの名無しさん
05/03/04 22:22:45クソBSDソケットの真似事しても無意味だと気付いたM$は
Winsock2.0の時点でさっさと独自API仕様に乗り換えたぞ
0023デフォルトの名無しさん
05/03/04 22:28:230024デフォルトの名無しさん
05/03/04 22:30:060025デフォルトの名無しさん
05/03/04 23:06:45ただ、マルチスレッドが多く使われる分野だから・・・
UNIXとWinでは、その辺で移植に困る事があるんじゃない?
あと、fork
0026デフォルトの名無しさん
05/03/04 23:10:130027デフォルトの名無しさん
05/03/04 23:13:40BSDでもwinsockでも
0028デフォルトの名無しさん
05/03/04 23:14:45最初からwinsockで作られた奴は綺麗
0029デフォルトの名無しさん
05/03/04 23:15:06たとえば?
0030デフォルトの名無しさん
05/03/04 23:18:45ソースが汚いというのは、記述スタイルの話じゃなくて、
マクロ乱用のことを言ってるんだと思う。
0031デフォルトの名無しさん
05/03/04 23:22:500032デフォルトの名無しさん
05/03/04 23:25:45なんかこう一本筋が通ってないというのかな。
0033デフォルトの名無しさん
05/03/04 23:28:42あーそれもある。名前のつけ方も刹那的だし。
0034デフォルトの名無しさん
05/03/04 23:30:220035デフォルトの名無しさん
05/03/04 23:30:23�dクス。
やってみるさ。
0036デフォルトの名無しさん
05/03/05 00:21:50殺那的ワラタ
もっと整合性を考えて欲しいよな。
一から作るC#で直るかと思ったら…orz
0037デフォルトの名無しさん
05/03/05 03:51:300038デフォルトの名無しさん
05/03/05 21:43:47ファイルをWINAPIのCreateFile云々を使ってchar型の変数に読み込んでそれをテキストファイルと同様に扱ったら送れたのですが、
画像はこのchar型変数の中でどうなってるんですか?
文字列として格納されているのですか?
char型変数を使うのが間違ってるのかなと思ったのですが>void型とか?
そこらへんどうなんでしょうか。
0039デフォルトの名無しさん
05/03/05 21:47:15「配列」って言いたいの?
0041デフォルトの名無しさん
05/03/05 22:49:01つか、ネットワークプログラミング関係無いし。
0042デフォルトの名無しさん
05/03/05 23:44:48の切り替えしにワラタ
0043デフォルトの名無しさん
05/03/05 23:52:42long は 32
short は 16
char は 8
配列はただのビット列なので区切りがわからないと扱いにくいから
型を指定してアクセスしやすくるす
charを使うと8ビットづつ shortを使うと16ビットづつといった具合
テクストは単にASCIIが8ビット単位しかないのでcharを使ってるだけ
Unicodeは16ビットになるのでshortになる
つか、ネットワークプログラミング関係無いし。
0044デフォルトの名無しさん
05/03/06 00:10:24>int はもっともPCに適したビット数(16 or 32 or 64) OSに依存
>long は 32
>short は 16
>char は 8
決まっているのは
sizeof(char)==1
char<=short<=int<=long
だけじゃなかったっけ?
つか、ネットワークプログラミング関係無いし。
0045デフォルトの名無しさん
05/03/06 00:15:410046デフォルトの名無しさん
05/03/06 00:33:16つか、ネットワークプログラミング関係無いし。
004738
05/03/06 01:23:01えっと・・・char型よりもビット数の大きい型の変数を配列にしてやればいいんですね。
//スレ違いすいませんでした。
0048デフォルトの名無しさん
05/03/06 08:24:03こんなこと言う奴初めて見た
しかもOSに依存ときた・・
0049デフォルトの名無しさん
05/03/06 09:09:55漏れのathlon64はlongが64bitです。どうすればよいでしょうか。
0050デフォルトの名無しさん
05/03/06 09:28:42long >= int >= short
0051デフォルトの名無しさん
05/03/06 11:39:45intは処理系で一番高速なアクセスができるビット数だと定義されてると思ってたけど違った?
__int64とかって意味ないな
0052デフォルトの名無しさん
05/03/06 11:43:23このドアホ
0053デフォルトの名無しさん
05/03/06 11:53:37もしかしてsizeof(char)==1オクテットとか信じてる?
0054デフォルトの名無しさん
05/03/06 12:12:20まあ動けばなんでもいいじゃんw
0055デフォルトの名無しさん
05/03/06 12:13:41スレ違いだからみんな正しい解答なんかしないよ
さっさとどっかに逝け
0056デフォルトの名無しさん
05/03/06 12:14:22そいつが作った稚拙なソースが他人に渡らないのであればな。
0057デフォルトの名無しさん
05/03/06 12:24:29>intは処理系で一番高速なアクセスができるビット数だと定義されてると思ってたけど違った?
もともとの意味はそうなんだけど、int=32bitを前提にしてるアプリが多くて、
互換性に支障をきたすから、64bitな処理系でもintを32bitにする事が多い。
基本ルール
sizeof(char)==1
char<=short<=int<=long
int>=32bit
最後のだけは守らなくてもANSI C準拠になったはず。
C99じゃlong longも正式採用になったしどうなったんだろ?
005857
05/03/06 12:25:37longだったかも・・・。
憶えてないや。
0059デフォルトの名無しさん
05/03/06 12:46:19上2段は正しいけど、規定されているのは、short>=16bitとlong>=32bitだけだよ。
intのサイズは間接的に>=16bitと決まるだけ。
0060デフォルトの名無しさん
05/03/06 12:53:200061デフォルトの名無しさん
05/03/06 13:10:46必要ないしね、開発する処理系のビット数だけ把握してればいい話
まだほとんどint = 32なんだから
0062デフォルトの名無しさん
05/03/06 13:12:53どうしようもないバカだな
0063デフォルトの名無しさん
05/03/06 13:15:040064デフォルトの名無しさん
05/03/06 13:37:47IT土方って呼ばれるんだよな。
0065デフォルトの名無しさん
05/03/06 14:10:38言語仕様をいくら顧客に語ったところで、お金にはならないよ
生産性も向上しないよ、ないようによってはするものもあるけど
技術は技術でもアルゴリズムとかUIの既存以外のアイデアをいくつ持ってるか
応用して作り出せるかのほうが重要
それができないならただ言語仕様に詳しいだけのコーダー(土方)
って発想が普通では?
0066デフォルトの名無しさん
05/03/06 14:32:08#include <stdint.h>して、uint16_tを使う。以上。
>>65
プログラマ板行け、この呆け。
0067デフォルトの名無しさん
05/03/06 19:44:3532bit=>int==32
64bit=>int==32
な
64bit以外は、確かにCPUにあわせたbit数になるため、最も高速にアクセス出来る。
64bitで最も高速にアクセス出来るのは、long longだ。
0068デフォルトの名無しさん
05/03/06 19:56:510069デフォルトの名無しさん
05/03/06 20:15:360070デフォルトの名無しさん
05/03/06 20:31:03俺もそう認識してたけど・・・
0071デフォルトの名無しさん
05/03/06 20:33:07http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&c2coff=1&q=int%8C%5E+CPU+%8D%C5%82%E0%8D%82%91%AC&lr=lang_ja
例外を除いてint型はCPU(OSも)と同じビット数になる。
しかし、64bitは互換性確保の為にint型でも32bitのまま
0072デフォルトの名無しさん
05/03/06 20:59:42妄信的に決め付けるのは間違いの元
0073デフォルトの名無しさん
05/03/06 21:26:47そう、OSも と言うのが重要
CPUだけ64bitでも、OSが16bitDOSじゃ意味ネェよ
0074デフォルトの名無しさん
05/03/06 21:46:26コンパイラ&リンカに依存してる
ただ普通は64OSなら64コンパイラを使うってことだと思われます。
0075デフォルトの名無しさん
05/03/06 21:58:14cray-1 なんかは short==int==long==64bitだった筈。
007675
05/03/06 22:03:05ttp://grizzlyweb.com/webmaster/ccodestd/c_decl.htm
あれ、cray-2 って書いてあるな。まあいいや。
とにかく、そういうマシンもあるってこと。
0077デフォルトの名無しさん
05/03/06 22:06:31AMD と Intel が暫定的にやってるだけの話のようだが?
0078デフォルトの名無しさん
05/03/06 22:21:58まあ、DOSは16bitだし。
とりあえず、自分の周辺の事しか知らない
井の中の蛙にはなりたくないね。
0079デフォルトの名無しさん
05/03/06 22:32:55別に暫定的じゃない。こういうABIの根幹に関わる部分は、一度
決めたら二度と変えないものだし。
UNIX系64bit OSは、crayみたいなスーパーコンピュータを除き、
ほとんど全てで short:int:long:pointer=16:32:64:64 てなってる。
alpha, irix(mips64), sparc64, amd64, ia64 すべてそう。
alpha や mips64 が出た当時は、まだ C99 以前、C89の時代だった
から、C言語標準に long long はなかった。
だから、longを64bitにするのが、ほぼ唯一の妥当な解だった。
で、この時代に longを32bitと常に仮定するようなソースコードは、
UNIXの世界からはほぼ一掃されたので、それ以降の64bitマシンも
同様の定義を使うのが慣例。
0080デフォルトの名無しさん
05/03/06 22:56:20では何ごともなかったように以下ネットワークプログラミングの話へ
0081デフォルトの名無しさん
05/03/08 04:05:48プラットフォームに依存しない作りにすることを心がけるためにも
以上の話題に無関心なのは困る
0082デフォルトの名無しさん
05/03/08 04:18:08意識しても無駄
どうしてもクロスなものが必要ならWrapperクラスを使うのが普通だし
そうなると意識する必要もない
よっぽどお馬鹿なことでもしないかぎり問題になることもない
桁数が精度に影響するようなつくりをする時点でいくらそういったことが
わかっていてもはっきりいって論外
桁溢れする可能性のあるものは文字ベースで扱うのが普通ですよ
それにtypdefってのはそういうことのためにあるものだし
0083デフォルトの名無しさん
05/03/08 04:43:24まだそんなこと言ってるのか
0084デフォルトの名無しさん
05/03/08 05:03:17理想を求めるのも必要
0085デフォルトの名無しさん
05/03/08 09:16:44システムの間でも通信はできるし実際やってるわけ
ですが。だからこのスレで話題になるんでしょ。
あとどうでもいいけど整数型のサイズは違う(ABIは
当然違う)が、APIは同じってシステムはかなり多いよ。
UNIX系はそんな感じだし。UNIXとWindowsの間でも
ISO-CとかC++で定義されているAPIは同じなんだし。
0086デフォルトの名無しさん
05/03/08 11:23:53アフォ?
0087デフォルトの名無しさん
05/03/08 11:45:31GCCしか使わない人ですか?
0088デフォルトの名無しさん
05/03/08 12:19:02はAPIの意味を根本的に取り違えてると思われます。
クロスプラットなソース書こうと思ったら
#if
VC用
#else
ボーランド用
#else
UNIX系用
#endif
って感じで結局別個に書くか、GygwinやMinGwやkylixのようなWrapperライブラリを
使うことになる
まあたしかに、速度の限界を追求するような例えば、圧縮ツールなんかの場合は
上記のように個別に記載することもあるけどね
ネットワークプログラミングでそこまでやってたらバグの元をわざわざ作るようなもんだ
0089デフォルトの名無しさん
05/03/08 13:00:540090デフォルトの名無しさん
05/03/08 13:25:21あほか
0091デフォルトの名無しさん
05/03/08 14:41:32ちょっと作って動けばいいやってそのままブラッシュアップされずに放置、みたいな。
何でいつまでも同じ過ちが繰り返されるんだ?
0092デフォルトの名無しさん
05/03/08 14:42:55つまり低能はプログラミングをするな、ということですね。
0093デフォルトの名無しさん
05/03/08 15:18:45そんだけ開発者にとってめんどっくさいIFだってことだろ。
俺はそうはおもわないんだけども。
0094デフォルトの名無しさん
05/03/08 16:53:560095デフォルトの名無しさん
05/03/08 18:55:39Unix的な極Primitive指向だもんな。
その代わりにWin32 APIなんかと比べると命令セットの肥大化を
うまく抑えて必要最低限なものだけで済むメリットもある、と。
0096デフォルトの名無しさん
05/03/08 20:02:40互換性に支障をきたすから、64bitな処理系でもポインタを32bitにする事が多い。
0097デフォルトの名無しさん
05/03/08 20:08:20そんなコード、見たことねぇな。恵まれた環境で仕事してるんだなぁ、俺(*´Д`)
0098デフォルトの名無しさん
05/03/08 21:22:22俺も使ったことはないんだけど、なんかよさげだよ。
0099デフォルトの名無しさん
05/03/08 21:29:36その「多い」って、いったいどこの処理系の話よ?
0100デフォルトの名無しさん
05/03/08 21:36:42目を合わせちゃ駄目ですよ。
0101デフォルトの名無しさん
05/03/08 22:17:55UltraSPARCとかそうじゃなかったっけ?
32bit互換モードとかあった気がする。
010299
05/03/08 22:24:21でも32bitモードは、「64bitな処理系」じゃない。
単なる「32bitな処理系」。
0103101
05/03/08 22:34:4364bitモードでもアドレスをuint32_tとかで扱うってことを言ってるのかしらん。
でも、それじゃ動かないよね?てっきり互換モードの話かと。。。
0104デフォルトの名無しさん
05/03/08 22:45:01なんて事は今までも多々あったし、XP64でも当然32bitプログラムは動く。
もちろん、x86に限らず、普通の64bitOS上では
既存の32bitバイナリがそのまま動くのが一般的。
もし>>96が「64bitOS上で32bitプログラムを動かす」ことを言っているなら
ただのバカだよ。
いや、「64bitOS(64bit処理系)でもポインタは32bitにする」と言ってるとしても
ただのバカであることに違いはないけど。
もしかしたら同一人物かもね。
http://pc5.2ch.net/test/read.cgi/tech/1109121175/38-
0105デフォルトの名無しさん
05/03/08 22:58:220106デフォルトの名無しさん
05/03/08 22:59:34バカ
0107デフォルトの名無しさん
05/03/08 23:09:080108デフォルトの名無しさん
05/03/09 02:45:490109デフォルトの名無しさん
05/03/09 02:55:09具体的には何使うの?
packet caputureなら、http://netresearch.ics.uci.edu/kfujii/jpcap/doc/←がある。
>>93
うーん、ソケットAPIの問題よりも、
ネットワークプログラミング固有の問題の方がずっと障壁になっていると思う。
ヘテロ環境への配慮、failureへの配慮など分散型システム固有の問題が。
集中型システムで頭固まっていると嵌まりやすい。
特に初級を脱却するくらいの時は天狗になっているケースがあって、
過去スレでも暴れる人が何人もいた。
0110デフォルトの名無しさん
05/03/09 03:43:00winsockはひどいもんだな
例えば、Asyncにしようとするとウィンドウへイベントって形でやらないといけないけど
クラスにシンプルにまとめようとしたときこれはかなりじゃまになる
接続が成功したか、失敗したか、途中で切れたかって判断がかなり複雑になる
からそのつど、プログラム量がけっこう多くなる
この辺はunixでもいっしょかな?
単純C/Sだとサーバ側がちょっと複雑になるだけですむけど、分散システムになると
もうわけわからんくなるね
0111デフォルトの名無しさん
05/03/09 04:05:50http://docs.hp.com/ja/B2355-60104-09/aio.5.html
な感じなら。
例によってprimitive形式で、frameworkまでいってないから、
初級者はパニックだろうね。
俺も正直なところあまりこれといった実績がないね(w
0113デフォルトの名無しさん
05/03/09 12:12:43切れたら、再接続に向かってどうしても繋げない状態を検出したら
その状態を検知した上でabortするような仕組みにすればいいのに
数十秒待たされたあげくに、実は切れてるねんとかいう今の仕組みはよくない
FTPやHTTPはこの切れを前提で作られたプロトコルだからいまさらどうしようもないのだろうけど
0114デフォルトの名無しさん
05/03/09 12:14:530115デフォルトの名無しさん
05/03/09 12:21:41アホは存在すること自体が罪。死ね。
0116デフォルトの名無しさん
05/03/09 12:22:590117デフォルトの名無しさん
05/03/09 15:06:39別にAsyncはウィンドウ必須じゃないんだけど。
0118デフォルトの名無しさん
05/03/10 10:14:28そこを論理的に教えて使えるようにするのがプロの仕事では?
もう教育係いやだ。。。(´Д⊂グスン
0119デフォルトの名無しさん
05/03/10 10:56:39ここは学校でも会社でもないからな
0120デフォルトの名無しさん
05/03/10 12:48:09socketoptで非同期通信にすると当然ぐるぐるまわさないと
即時応答はできない
そうなるとスレッドを使わないといけなくなるわけだが、ぐるぐる回す時点でかなり
リソースの無駄使い
しかもVC++のクラスはスレッドセーフじゃないのでかなりかっちょわるいソースになる
つーか>>114-117はwinsock知らないだろ?
0121デフォルトの名無しさん
05/03/10 12:56:50ハァ?何言ってんだお前。
0122デフォルトの名無しさん
05/03/10 13:00:220123デフォルトの名無しさん
05/03/10 14:04:01では漏れが。
Winsockでウィンドウとメッセージポンプを使いたくないなら(当然使いたくないが)、
・セッション数が少ないならスレッドで普通にselectしつつ動作
・セッション数が多いならWSAEventSelect とかIOコンプリーションルーチンやらを使う
あたりが定番。
サーバアプリなどで性能が要求される場合には、IOコンプリーションルーチンつきの
IOリクエストを常時複数投入しておいて、カーネルが待ち時間無しで随時IO処理できる
ようにすることもある (IOキューイングという手法)。
UI オリエンテットなアプリで、通信のスループットなんかどうでもいい場合にはウィンドウ
メッセージを使う場合もある(のか?やったことないけど)。
0124デフォルトの名無しさん
05/03/10 16:19:060125デフォルトの名無しさん
05/03/10 16:39:34いやしかし、>>113の
>切れたら、再接続に向かってどうしても繋げない状態を検出したら
>その状態を検知した上でabortするような仕組みにすればいいのに
ってまさに今のTCPそのもののように思うんだけど・・・
数十秒も頑張らなくて良いよ、ってことなのかな。
0126デフォルトの名無しさん
05/03/10 19:07:24今のTCPのどこがそこまでしてくれるんだ?
コネクション確立っていっても定期的に状態確認しあってるわけでもないし
ちょっと瞬断しただけで、コネクションが切れて
しかもデータのやり取りが発生するまでは無反応
それが今のTCPの仕様
0127デフォルトの名無しさん
05/03/10 19:15:25KeepAliveをONにすればしてくれるでそ。
んで、KeepAlive始めるまでの時間の諸口が長く、またコネクション毎にこの時間を設定できないOS/
プロトコルスタックが殆どで使いにくいのは確かだけど、これはTCP/IPの責任ではないと思う。
じゃあ誰のせいだ、というとよくわからないけど。
TCP/IPのKeepAliveは使わないで上位プロトコルでやるという伝統のせいか?
0128デフォルトの名無しさん
05/03/10 19:15:54訂正: 「使いにくい」⇒「使い物にならない」
0129デフォルトの名無しさん
05/03/10 19:33:44この際、新しいプロトコルを考えてもいいかもね
0130デフォルトの名無しさん
05/03/10 19:45:45再接続したければ、再接続すればいい。
>>126は低能だから無視。>>120>>113も同様。
> 再接続に向かってどうしても繋げない状態を検出したら
出来る時はしているのに、
低能ゆえ出来ない時がどういう時か理解できずに見当違いの愚痴を言う呆け。
0131デフォルトの名無しさん
05/03/10 21:01:53ネットワーク高速化してるのに、低脳ゆえ出来るときが多様化してることにも
気づかないのですね?
0132デフォルトの名無しさん
05/03/10 21:52:46こんにちわ。プロトコロジョージです。
0133デフォルトの名無しさん
05/03/10 22:54:00window scalingとかselective ackとかTCPも進化してるぞ。
0134デフォルトの名無しさん
05/03/11 00:23:030135デフォルトの名無しさん
05/03/11 00:26:58そういう問題以前の戯言と思われ。
0136デフォルトの名無しさん
05/03/11 00:29:570137デフォルトの名無しさん
05/03/11 01:15:54本来のTCP/IPの再接続が出来ない環境に
なっている人も少なからずいる。
>>113 >>120 >>126 は
それを知らずに愚痴ってるだけ。
0138デフォルトの名無しさん
05/03/11 02:33:38> 本来のTCP/IPの再接続
って何よ? TCPのRSTのこと?
0139デフォルトの名無しさん
05/03/11 20:10:56POP3サーバが LIST コマンドを受けたときに返す、メッセージの
オクテット数についてですが、メッセージの中に "." で始まる行が
あった場合、この "." を2オクテットではなく、1オクテットと数えな
ければならない、っていうことでしょうか?
参考:
http://www.ietf.org/rfc/rfc1939.txt
11. Message Format
http://srgia.fc2web.com/docs/rfc1939j.html#11
11. メッセージ形式
0140デフォルトの名無しさん
05/03/11 20:24:530141デフォルトの名無しさん
05/03/11 20:31:320142デフォルトの名無しさん
05/03/11 20:58:01あってます。multiline response の形式としては、termination octet (.) で始まる行は
先頭にもう一つ termination octet を付けることになっているが、メッセージのオクテット数
を数える上では行頭のtermination octetを2倍に数える必要はない(数えてはいけない)、
ということです。
改行については特に質問されていないようですが、改行は当然2オクテットで数えます。
0143デフォルトの名無しさん
05/03/11 20:58:19あんまり長いとバッファオバーフローおこしちゃうでしょ
まあこれくらいにしといてよってことの話でしょ
70以下に抑えときゃまああんま深く考える必要もないかもしれん
0144デフォルトの名無しさん
05/03/11 21:08:50なんか質問とは全然関係ないような気もするが・・・
確かに、以前調べたときは1024バイト程度でJISのシフトINとか無視して
勝手に改行入れてくれるMTAが結構あった。
仕事でMUA作ってたんだけど、そういうので化けてもOKにする必要が
あってメンドクサカッタなぁ。
0145デフォルトの名無しさん
05/03/13 11:40:39登録の上限数ってどこに書いてあったっけ
OSはredhat9でカーネルは2.4.26使ってます
何も考えずに800本くらい使ってるけど
このくらいなら大丈夫だったっけか
0146デフォルトの名無しさん
05/03/13 12:20:43select 側には特に制限はない。
むしろファイルディスクリプタ数の方の
制限で決まる。
ただ、800ぐらいの数になると、epoll(4)
とか kqueue(2) とか使った方が速い可能性
がある。こいつらは今のところあまり移植性が
ないので、libevent を使うのが吉。
ttp://www.monkey.org/~provos/libevent/
0147デフォルトの名無しさん
05/03/14 22:30:18MSNメッセンジャーにあるような、NATの種類を判別するプログラムはどのようにすれば良いのでしょうか?
シンメトリックの場合とそれ以外の場合とで処理を別にしたいのですが・・・。
よろしくお願いします。
WinSockで組んでいます。
0148デフォルトの名無しさん
05/03/14 23:33:010149デフォルトの名無しさん
05/03/14 23:35:59なんの話?
0150デフォルトの名無しさん
05/03/15 04:00:540151デフォルトの名無しさん
05/03/15 09:35:010152デフォルトの名無しさん
05/03/15 10:50:490153デフォルトの名無しさん
05/03/15 11:58:32マクロなので sys/select.h か sys/types.h あたり見て確認しる
0154デフォルトの名無しさん
05/03/15 14:07:42良いと思われ。引数範囲チェックとかもなし。
0155デフォルトの名無しさん
05/03/15 19:30:15FD_SETを1万回やったらどうなるかなというちょっとした好奇心
0156デフォルトの名無しさん
05/03/15 19:45:590157デフォルトの名無しさん
05/03/15 21:10:15UDPは到着順も保障されないと言う事ですけど、
これは、送信時に大きなデータをWinsockが勝手に細かく切って送信した場合の到着順も保障されないのでしょうか?
0158デフォルトの名無しさん
05/03/15 21:12:47はい。
0159デフォルトの名無しさん
05/03/15 21:14:33アプリに渡すので、アプリからみると、分解されてない
ように見える。
もし、フラグメントが一つで途中で失われると、パケット
全体が失われる。
0160デフォルトの名無しさん
05/03/15 21:23:27失われるだけで、順番は正しくなるのでしょうか?
失われるだけだと、再送処理を行えば良いだけなんですが・・・。
0161デフォルトの名無しさん
05/03/15 21:45:12逆に不ぞろいだったとして、カーネルが制御してるものをどうやって順番に並べるの?
0162デフォルトの名無しさん
05/03/15 22:12:43いやー、だからエラー処理は出来ないのかなぁ?と
最初から分割されるサイズを考慮して、プログラムでそのサイズを超えないように分割しないといけないのかな?と
0163デフォルトの名無しさん
05/03/15 22:13:16関しては、カーネルが順番どおり並べてくれるの
で問題ない。ただし、全パケット届けば。
パケット損失確率がある程度高いネットワークだと、
フラグメントが失われる→全再送が生じてネットワーク
バンド幅を無駄使いすることが多くおきるので、
UDPの1パケットは、あんまり大きくしない方が良いことが
多い。
0164デフォルトの名無しさん
05/03/15 23:04:53CPU依存とのことなのでCeleron, Pentium, Athlon, K6を使うOSは全てリトルエンディアンですよね?
0165デフォルトの名無しさん
05/03/15 23:07:28> K6を使うOSは全てリトルエンディアンですよね?
これは、その通り。
> LinuxもFreeBSDもその他PC UNIXも全てリトル
> エンディアンですか?
Linux や FreeBSD は、PC だけでなくビッグエンディアンの
マシンでも動くので、OS だけからは何ともいえない。
0166デフォルトの名無しさん
05/03/15 23:22:31FreeBSD同士でも企業の使ってるでかい箱とPCとでは
バイトオーダーが違うこともあるということですか?
0167デフォルトの名無しさん
05/03/15 23:24:46当たり前の事を聞くなよ
0168デフォルトの名無しさん
05/03/15 23:27:300169デフォルトの名無しさん
05/03/15 23:28:190170デフォルトの名無しさん
05/03/16 00:05:23それは勘違い。
*BSDやLinuxはそういうレベルでの互換性を保ってはいない。
0171デフォルトの名無しさん
05/03/16 00:36:560172デフォルトの名無しさん
05/03/16 01:16:59多様なバイナリならば、ヘッダ部とデータ部が分かれていると思いますが
1度処理したら次の処理許可まで、ヘッダ部を解析してデータ部は読み捨てを繰り返すしかないのですか?
0173デフォルトの名無しさん
05/03/16 02:20:39ちっちゃいMac miniもPowerPCでビッグエンディアン。
0174デフォルトの名無しさん
05/03/16 03:06:35何の話やねん!?
0175デフォルトの名無しさん
05/03/16 03:08:040176デフォルトの名無しさん
05/03/16 04:42:510177デフォルトの名無しさん
05/03/16 10:43:290178デフォルトの名無しさん
05/03/16 10:52:18ていうかそんぐらいすぐ見つかるから調べれ。
0179デフォルトの名無しさん
05/03/16 11:05:03ありがと
ググッたらすぐ出てきた。これ有名なプロトコルなのな。
知らなかった世。
これって、UDPだけど双方向にデータやり取りするよね。
どうやってるの? 送信してきたポートに返してるの?
162の方は片方向みたいだけど。
0180デフォルトの名無しさん
05/03/16 11:52:43RFCよめ
0181デフォルトの名無しさん
05/03/16 13:29:55ありがと
RFC日本語見つからなかったからパケットキャプチャしてみた。
これって発信元ポートに返してるんだな。
なんでTCPにしなかったのかな。
ブロードキャスト?とかするから?
0182デフォルトの名無しさん
05/03/16 14:04:420183デフォルトの名無しさん
05/03/16 14:13:23てか、おめぇ調べる気ねぇだろ。
やってる事がずいぶんと半端じゃねぇか?
0184172
05/03/16 21:01:22まあゲームとかチャットとかコミュニティ向けの技術だしな。
0185デフォルトの名無しさん
05/03/16 23:26:31ttp://www.faqs.org/rfcs/rfc3430.html
実装してるの見たことないが。
0186デフォルトの名無しさん
05/03/17 01:02:09何言ってんだ?
突然、
>>172
> 多様なバイナリならば、ヘッダ部とデータ部が分かれていると思いますが
って頭おかしい人かと思ったぞ。「ならば」て
0187デフォルトの名無しさん
05/03/17 01:08:120188デフォルトの名無しさん
05/03/17 01:49:33目的は何?帯域制限の話?それとも何か別の事?
そして>>172の書いてる俺技術についての中身が全くわからないし。
とりあえずエスパーきぼんぬに該当するなとしか思えなかったからね。
>まあゲームとかチャットとかコミュニティ向けの技術だしな。
これにはちょっと興味がわくので、他の人にもわかるように書きなおしてほしいね。
0189デフォルトの名無しさん
05/03/17 02:04:39しているような印象を受けたな。>>172は、おそらく
制限値以上のレートでパケットが届いたらそれを
無視しようって意味のような気がしなくもないが、
>>186や>>188の言うとおり、エスパーきぼんぬと
しか思えない。
まあ、RTPの本でも読んでみたら?
ttp://www.amazon.co.jp/exec/obidos/ASIN/4274065618/
とか。
0190デフォルトの名無しさん
05/03/17 03:01:510191デフォルトの名無しさん
05/03/17 03:16:490192デフォルトの名無しさん
05/03/17 03:23:26送受信バッファが溢れる〜ってことになったりせんの?
0193デフォルトの名無しさん
05/03/17 03:29:31それくらい試せるべ?
0194デフォルトの名無しさん
05/03/17 03:37:12ポイズン
0195デフォルトの名無しさん
05/03/17 04:31:50バッファがページファイル化されて余計だめっぽかった。
むしろ溢れろよと。
0196デフォルトの名無しさん
05/03/17 05:05:32至ることが可能なんだ?
TCP使ってるなら、受信可能なバイト数は常に
ウィンドウサイズとして受信側のカーネルが
送信側のカーネルに伝えているから、読みとり
を減らせば、ウィンドウが閉じて、送信側が
勝手に待ってくれる。溢れることもなけりゃ、
ページアウトされることもない。少なくとも
UNIX系OSの場合、ソケットバッファに滞留して
いるデータは、物理メモリに常駐しているから。
この場合、まず送信側のカーネルメモリに溜り、
SO_SNDBUF のサイズ越えて溢れそうになったら、
今度は送信を行おうとするアプリケーションが、
送信システムコールを発行するところで止められる。
0197デフォルトの名無しさん
05/03/17 09:04:10connect()とかrecv()とか、指定時間たっても結果が得られなかったらfailedを返してしまうみたいなオプションがあればどれだけコードがスマートになるか・・・・
なんで実装しないんですかね?
0198デフォルトの名無しさん
05/03/17 09:08:35ユーザが実装しろってことじゃなくて?
0199デフォルトの名無しさん
05/03/17 10:30:58selectすればいいじゃん
0200デフォルトの名無しさん
05/03/17 10:54:16激しくガイシュツなんだが、
WinsockのI/0タイムアウトはやばいから気をつけろ。
特に2000Pro以前。詳しくはMSDN読んでくれ。
0201デフォルトの名無しさん
05/03/17 11:00:43503 Service Unavailableの時に
Retry-After: 60
で、retry間隔を指定して、Layer 7でのcongestion control。
0202197
05/03/17 11:07:33いやぁ、その処理の為にわざわざ別の関数を持ってきてコード書くんだったら
connect()とかにそういうオプションをつければ行で済むしスマートじゃないかなぁ と。
詰めて三行程度で書ける、たかが三行だけど出来上がったコードはスマートじゃないよね。
接続 と言う目的以外の処理コードがあるんだから・・・。
1つの関数の引数を複雑にするくらいなら、関数の数を増やした方が良い って考えはわかるけど
この程度の為に色々持ち出すのも・・・・。
0203デフォルトの名無しさん
05/03/17 11:11:04引数が山のようにあって、引数で出来ることと出来ないことに対称性が全くない。
0204デフォルトの名無しさん
05/03/17 11:45:46それが気になるなら、タイムアウトつきの処理を
connect_timedwait() みたいな関数として独立
させて、メインの処理からはそれを呼ぶだけに
すれば?
0205デフォルトの名無しさん
05/03/17 12:11:01そんなこと言いだしたらconnectに限らず時間のかかる全ての関数に
timeout引数が欲しいってことになってくるじゃねーか
0206デフォルトの名無しさん
05/03/17 12:17:500207デフォルトの名無しさん
05/03/17 12:21:17だから、みんなが独自に connect_timedwait() を作るのは馬鹿らしい
ってことでしょ。OS に同梱されているならともかく。
0208デフォルトの名無しさん
05/03/17 12:22:19単純に接続するだけの、connect関数と
その関数に対する待機は別問題とおもう。
0209デフォルトの名無しさん
05/03/17 12:25:28待ちしたいというのがむしろ特殊な要求で、むしろselectで
複数待つ方がふつうだから用意するまでもないんでしょ。
0210デフォルトの名無しさん
05/03/17 12:26:480211デフォルトの名無しさん
05/03/17 13:31:456.11 Connect with timeout (or another use for select() )
Winsock Programmer's FAQ
2.14 - How can I change the timeout for a Winsock function?
URLは>>1で
0212デフォルトの名無しさん
05/03/17 13:35:32>>200にも書いたが、タイムアウトが起きると先頭のデータ失うから。(古いWindowsで)
0213デフォルトの名無しさん
05/03/17 13:53:00自分用ライブラリには標準装備した。
簡易的なクライアントソフトってセッション1つで
十分だからselectは接続後にしか使わない
そんな感じ
0214デフォルトの名無しさん
05/03/17 17:16:46ライブラリを公開して広く使ってもらえるようにすればいいのに。
Windowsユーザって、なんでそういう発想ないの?
0215デフォルトの名無しさん
05/03/17 17:32:02ライブラリライブラリっていうが、
もともと使いにくいと言って出てきた関数は言うなればAPIみたいなもんだろ。
それらを組み合わせ使いやすいように拡張するのがライブラリなのであって、
そのライブラリはMS製だろうが、オープンソース物だろうが関係ないんでは?
Windowsユーザーだなんだって話じゃなく、便利なライブラリがほしいだけ、
そのライブラリ作成者になろうとすら思わない、お前に一つも問題はないっていうのか?
0216デフォルトの名無しさん
05/03/17 17:36:04何で>>215のためにライブラリを作るの?
0217デフォルトの名無しさん
05/03/17 17:37:25なくなくない?みたいな間違いをしてしまった
0218デフォルトの名無しさん
05/03/17 17:39:170219デフォルトの名無しさん
05/03/17 17:43:27ライブラリ作成者が便利なものつくったのなら、なぜ皆に公開してあげないの?
って言いたいのね、読み違えまくった・・・吊ってくる orz
Windows系の開発者さんたちは、確かにそういう傾向の人多いかもしれないね。
0220デフォルトの名無しさん
05/03/17 18:59:440221デフォルトの名無しさん
05/03/17 19:07:21直感でいいから、きゅぴーんと来たほうを言ってくれ。頼む。
0222デフォルトの名無しさん
05/03/17 19:10:40FTP を見よ。
0223デフォルトの名無しさん
05/03/17 19:29:130224デフォルトの名無しさん
05/03/17 20:38:150225デフォルトの名無しさん
05/03/17 20:45:14FreeBSDの鯖にWinの倉でコネクトした後色々通信してクローズするとそうなります
0226デフォルトの名無しさん
05/03/17 21:09:55全部読まないうちに、相手側がコネクションを切断してし
まったってこと。正常に通信してても頻繁に起きるような
ら、どちらかがプロトコル処理を間違えてる可能性がある。
FreeBSD 側に関しては、ネットワークトラブルでそういう
ことが起きることはあるし、クライアント側が勝手にこけ
てもそういうことは起きるので、サーバ側としては正しく
動作を継続するために、signal(SIGPIPE, SIG_IGN) として
おく。こうすると SIGPIPE が飛んでくるんではなく、
write(2) や close(2) が EPIPE を返すようになるから、
エラーコードをきっちり見て、きれいに後始末すること。
クライアント側でもネットワークトラブルでそういうこと
が起きることがあるのは同じだけど、この場合、むしろ
サーバー側のプログラムミスの可能性の方が高いかもね。
って Winsock って、Broken pipe の場合どういう反応を
するんだっけか?
0227デフォルトの名無しさん
05/03/17 21:24:31送ろうと思ったけど、何らかの理由で送れなかった時。
0228デフォルトの名無しさん
05/03/17 21:26:28↓Javaだけど、half-close問題は同じ。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/net/articles/connection_release.html
0229225
05/03/17 22:16:32その他色々参考になりました。ありがとうです
0230デフォルトの名無しさん
05/03/18 00:16:05よっしゃ、2つでがんばるよ。
最大で5つくらいまで必要かも知れんけど。
0231デフォルトの名無しさん
05/03/18 00:17:06> Broken Pipe が起きるってことは、こちらの返事を相手が
> 全部読まないうちに、相手側がコネクションを切断してし
> まったってこと。正常に通信してても頻繁に起きるような
> ら、どちらかがプロトコル処理を間違えてる可能性がある。
これ逆だよね。
>>229
half-closeだったってことだね。
0232デフォルトの名無しさん
05/03/18 00:17:50その場合は5つだよ。俺も経験から言って間違いない。
0233デフォルトの名無しさん
05/03/18 01:18:32逆? 合ってると思うけど…
それに half-close とは限らないよ。
1. クライアント側が shutdown(, SHUT_WR) で half-closeする。
2. サーバー側がクライアントになにか書く
3. クライアント側がその内容を読み込む
4. クライアント側が完全に close する。
5. サーバー側がクライアントになにか書く
とすると、5で初めて Broken Pipe になる。
つまり、half-close とは関係なく起きる。
0234おしえて君
2005/03/22(火) 18:38:08作りたいんだけど、なんかこれって簡単に実現できないのかな??
String型をbyte型配列に変換して送受信するようなサンプルはよくあるんだけど、
int型の二次元配列の場合、同じようなやり方だとできないよね??
なんか解決策ないでしょうか。
0235デフォルトの名無しさん
2005/03/22(火) 18:52:050236& ◆hJb7GWrzxo
2005/03/22(火) 18:58:40とくに深いこだわりも意味もないんだけど、UDPって何か問題ありなの??
あと補足なんだけど
byte型配列にいれないと、ネット送受信できないって理解は正しいのかな??
int型二次元配列をbyte型の一次元配列に入れて、
そしてbyte型一次元配列からint型二次元配列を取り出すうまいアイデアが
あればいいのかなあとか思うんだけどこのアプローチはあってる??
0237デフォルトの名無しさん
2005/03/22(火) 19:16:550238234&236
2005/03/22(火) 19:23:58言語はJAVAです。アドバイスよろ
0239デフォルトの名無しさん
2005/03/22(火) 19:26:170240デフォルトの名無しさん
2005/03/22(火) 19:29:27http://www5e.biglobe.ne.jp/~liquor/raytrace/
http://www5e.biglobe.ne.jp/~liquor/prime/
↑ってどうやってるんだろうね
0241デフォルトの名無しさん
2005/03/22(火) 20:34:10みんな教えてもらえなかったかわいそうな君へ。
■ UDPがどうしても必要なとこ以外はTCPを使え
■ その程度の質問してる奴にUDPが必須なアプリは作れない
■ TCPでパケットがくっついちゃうんですけどって質問はするな
0242234&236
2005/03/22(火) 21:10:00それをString型にもどすには
String data = new String(packet.getData(),0,packet.getLength());
となると思うんだけど、
これがint型の二次元配列の場合はどうすりゃいいのかさっぱり分からん。
packet.getData()がbyte型の配列を返すのかと思って、
packe.getData()[i]でiをインクリメントして表示させてみたりしたけどだめですたし。
どうしろってんだYO!!
0243デフォルトの名無しさん
2005/03/22(火) 21:17:33intの二次元配列を文字列にして、文字列を送信して、文字列を受信して、
intの二次元配列に復元しなさい。区切りに\nとか\tとか,でも挟んどけ
0244デフォルトの名無しさん
2005/03/22(火) 21:44:100245デフォルトの名無しさん
2005/03/22(火) 21:46:150246デフォルトの名無しさん
2005/03/22(火) 21:58:28特にUDPが必要な場面じゃないなら、
余計な苦労はしない方がいいでしょ。
0247デフォルトの名無しさん
2005/03/22(火) 23:49:48入り(クライアントが接続する部分)が socket、
出(接続先へのアクセス)が XTI というソースになってます。
このようなケースは良くあることなのでしょうか?
両方 socket で良いように思うのですが、あえてこのようにする意図が分かりません。
意味は有るのでしょうか?別に意味は無いのでしょうか?
どなたか、この意図を解説していただけないでしょうか?よろしくお願いします。
# ちなみに、今このプログラムの設計者は社内に在籍していませんです。
0248デフォルトの名無しさん
2005/03/23(水) 02:33:25実は片方は IP だけど、片方は IP じゃないとか?
さもなくば意味ない希ガス。
socket 使った方が便利な機能と、XTI にしかない機能が微妙に
あるので、それらに依存している場合は使い分ける意味がない
わけでもないが、そういうのは非常にマイナーな機能なので、
普通は要らない。
0249デフォルトの名無しさん
2005/03/23(水) 09:01:30リチャード・スティーブンス本の中でのファンタジーだと思ってた
0250デフォルトの名無しさん
2005/03/23(水) 09:11:030251234&236
2005/03/23(水) 10:48:05バイト配列は DataOutputStream と ByteArrayOutputStream を組み合わせて作り、受け取る側は ByteArrayInputStream と DataInputStream を利用して int 配列に戻す
という方法って、どうなの?どうやればうまくいく?
0252デフォルトの名無しさん
2005/03/23(水) 10:59:120253デフォルトの名無しさん
2005/03/23(水) 11:00:240254デフォルトの名無しさん
2005/03/23(水) 11:02:32既にネットワークとは関係ない訳だが
0256http://www.geocities.com/tokyufubai/
2005/03/23(水) 11:33:36特に問題はありません。具体的言えば、メモリ使用率が90%であっても
その値が常に一定しているのであれば、リソースの競合も
発生していないと言えます。
0257デフォルトの名無しさん
2005/03/23(水) 18:53:44IDとパスワードいれたらログインできたりするプログラムなんですが、プログラム辞典なんかで
調べたんだけど載ってないし・・・だれかわかる人いますか?
0258デフォルトの名無しさん
2005/03/23(水) 18:55:240259デフォルトの名無しさん
2005/03/23(水) 20:41:47規模と予算を書いてソフト会社へ問い合わせたまえ
0260デフォルトの名無しさん
2005/03/23(水) 20:44:40生データをそのまま送るなら、別にこのスレに来なくても良いだろ。
0261デフォルトの名無しさん
2005/03/23(水) 21:17:38何で誰も言わないんだ。「ス・レ・違・い」だと。
0262247
2005/03/23(水) 21:55:48なるほど、ありがとうです。
両方 TCP です。
今日 再度ソース見ましたが、XTI の部分で特に変わった部分は何も無いようでした。
特に意味無しと思っときます。
# 当時の設計者が XTI を使ったのは単なる気まぐれか... 気になるなぁ (-_-?
0263デフォルトの名無しさん
2005/03/23(水) 22:26:04もしソレが 10〜15年くらい前の官庁関連の仕事なら、
OSI参照モデルに沿ったプロトコルスタックが採用されるという話などもあったので
その辺への対応を想定して片側にXTI を使っていてもおかしくはないと思います。
都庁の初代ネットワークなんかがそんなんだったような気がする。
0264262
2005/03/24(木) 01:28:39この案件自体は割と最近(ここ5年以内)の物です。
ですが、ソースの方はもっと古いらしく、遡ると某大手電器メーカから買った物が元になってるらしい、との話も聞きました(保身モード)。
もしそうだとすると、その説明が元ソースに対して当てはまる可能性も十分有り得そうに思えます。
というか、そう考えると結構納得出来ますね。ありがとうございます。
# 島のボスもその頃現役のはずだから、ひょっとするとその辺りの昔話が聞けるかも
0265デフォルトの名無しさん
2005/03/24(木) 11:01:00俺は一応>>260で遠まわしに言ったつもりだが・・・
0266デフォルトの名無しさん
2005/03/24(木) 11:04:250267デフォルトの名無しさん
2005/03/24(木) 14:23:51WinSock2.0プログラミングに
Win2000なら重複IOで完了ルーチンより完了ポート使った方がいいとかあったんですけど
そんなに違うものなんですか
0268& ◆hJb7GWrzxo
2005/03/24(木) 14:35:29こんなコードをコマンドプロンプト二つ立ち上げて二つ起動してみる
実験をしてるんですが、BindExceptionが出てしまいます。
二つのコードをそれぞれちょっとズレたポート番号に変えたりしてみたんですが
やっぱり無理みたいです・・・。
どっちを先に立ち上げても相手にメッセージがとどくようなUDPのコード
にしたかったんですけど・・・どうすりゃええんだい!?
0269& ◆QWv3R1XL8M
2005/03/24(木) 15:03:34ありました。
で、一応期待通りに動くようになったっぽいんですが、
やはりBindExceptionはでてしまいます。これは何故でしょうか。
どちらもlocalhostに送受信しているからでしょうか?
別のコンピュータ同士で実験する場合、このエラーはでなくなるのでしょうか。
おしえてください
0270デフォルトの名無しさん
2005/03/24(木) 15:05:01大くの実装では、同じポート番号で受信するためのUDPソケットはlocal側の
IPアドレス毎に1つだけしか作れない。
(これがマルチキャストでも同様なんだから困ったもの・・・)
何か調停役のレイヤー(このレイヤーが作成管理する単一のソケットで全て受信し、
その後要求元それぞれに分配)を作るか、同時に動くコード同士でポート番号を変えるか
するしかない。
>二つのコードをそれぞれちょっとズレたポート番号に変えたりしてみたんですが
>やっぱり無理みたいです・・・。
これが無理ってことは無いと思う。コード見てないけど。
0271& ◆QWv3R1XL8M
2005/03/24(木) 15:56:52調停役のレイヤーなんてどうやって作るの
0272デフォルトの名無しさん
2005/03/24(木) 16:19:53C++ / Windows なら Outproc COM オブジェクトを作るのが最も簡単だと思う。
C# なら .NET Remoting でやるか、あるいはごく簡単に UDP から recv しつつ
接続してきた(複数の)クライアントに受信内容をコピーして渡すEXEを起動作って、
それを用いるとか。
0273& ◆QWv3R1XL8M
2005/03/24(木) 16:40:38どうやら僕には高度すぎて分からないことのようだ。
時間があるならもっと詳しくおしえてください
0274デフォルトの名無しさん
2005/03/24(木) 17:42:31受信用のUDPをポート5555で作成
・作成に失敗⇒スレーブとして動作
⇒既に別インスタンスが動いているとして、適当なポートで受信用UDPソケットを作る
⇒そのソケットから5555に分配要求を送ってみる
⇒返事が来たらOK。そのポートで受信を続ける。
・作成に成功⇒マスタとして動作
⇒そのソケットで分配要求を受信したら、転送先リストに送り元のアドレス:ポートを追加
⇒その他のデータグラムを受信したら、受信データを処理。
ついでに転送先リストにあるスレーブにも送っておいてあげる。
終了したスレーブへ転送しないようにするには、例えば転送先リストを揮発性(古いエントリは消える)に
しておいて、スレーブは一定間隔で分配要求を送るとかする。切断要求で消す式だと切断要求がlost
したときへの対応が面倒だから。
まだスレーブがいるのに、マスタ側が終了したいときの処理は面倒。ちょっとパケットを受信し損ねても
いいなら、スレーブのどれかをマスタに昇格させるような処理を行えばよい。
できるだけパケットを失いたくないなら、マスタは終了せずにUIだけ消して受信転送処理は続ける。
0275デフォルトの名無しさん
2005/03/24(木) 17:45:57あとこういう実装だと自分が送ったものも受信してしまうので、パケットに載せる
ペイロードの中身に識別子などつけて適当に区別できるようにしたおく必要も
あるかもしれない。
0276おしえて厨
2005/03/24(木) 20:31:42とほぼ同じ内容のコードを、for文の中にぶちこんで100回ループさせて
みたんですが、最初の一回以外はぜんぶBindExceptionになります。
ループで何度も同じポート番号に送受信するのも、無理なんですか??
それとも僕のやり方に問題があるだけ??
main()全体をforで囲んで100回ループさせてるんですが
0277デフォルトの名無しさん
2005/03/24(木) 20:38:11うるせえな
1から基本を身に付けてこい
0278& ◆hJb7GWrzxo
2005/03/24(木) 21:12:37冷てえな
そういわずに教えてくれよ
0279デフォルトの名無しさん
2005/03/24(木) 21:21:29うるせえな
1から基本を身に付けてこい
0280デフォルトの名無しさん
2005/03/24(木) 21:29:44ブラウザを使わずにやる方法や参考になるサイトありましたら教えてください。
やりたいのはPC起動時の時間をPHPで保存したいだけです。ブラウザは使わずに
画面になにもでることなく終了したいです。
スタートアップにURLのリンクを張ればできるのですが、ブラウザが起動してしまいますので。。
0281デフォルトの名無しさん
2005/03/24(木) 21:33:55その程度ならソフト作成依頼スレにでも書けば?
言語問わずなら5分もあれば十分に作れる
俺は作らんけどな
0282& ◆QWv3R1XL8M
2005/03/24(木) 21:41:23socketをクローズしてないから問題なんだな?
おいそれぐらいおしえてくれよ
0283デフォルトの名無しさん
2005/03/24(木) 21:43:210284デフォルトの名無しさん
2005/03/24(木) 21:45:27試せばいいじゃん。聞くより早い。
0285280
2005/03/24(木) 21:52:06WINDOWS上で動いて、notepadなどで作成できるものがいいのですが。
>>281
URL教えてください。
0286デフォルトの名無しさん
2005/03/24(木) 21:57:10http://pc8.2ch.net/test/read.cgi/tech/1046576456/
手取り足取り教えないといけないのかよ
餓鬼か?
0288おしえて厨
2005/03/24(木) 22:49:53おいsocket.close()したらBindExceptionでなくなったぞ。
でも100回ループする完了する前に途中でフリーズする。
なぜだ。
何回目でストップするかはランダム
0289デフォルトの名無しさん
2005/03/25(金) 01:12:41これは、指定したポインタにnull文字を含む文字列を入れるのでしょうか?
それとも、null文字までを入れて、null文字は含まないのでしょうか?
どうも、フフフフフが発生してまして・・・。
0290デフォルトの名無しさん
2005/03/25(金) 01:18:06> ナル文字まで受信するみたい
みたいってなんだよ
0291デフォルトの名無しさん
2005/03/25(金) 01:19:34初歩のプログラミングの方を勉強した方がいいような奴が
一気に湧いてきたな。春のせい?
0292デフォルトの名無しさん
2005/03/25(金) 01:23:410293デフォルトの名無しさん
2005/03/25(金) 02:02:590294デフォルトの名無しさん
2005/03/25(金) 07:40:59recv、recvfromはnull文字かどうかなんて判定しない
それに受信はバイナリだからnull文字=’\0‘=0x00(普通なら)ということ
受信したサイズは戻り値を確認しる
フフフフフフフはVCがデバックの時
初期化されてないメモリを埋める時に使ってる
0295デフォルトの名無しさん
2005/03/25(金) 07:47:320296デフォルトの名無しさん
2005/03/25(金) 07:49:370297デフォルトの名無しさん
2005/03/25(金) 08:10:230298デフォルトの名無しさん
2005/03/25(金) 08:22:520299デフォルトの名無しさん
2005/03/25(金) 08:30:350300デフォルトの名無しさん
2005/03/25(金) 08:31:130301デフォルトの名無しさん
2005/03/25(金) 08:47:01そろそろ洗い流してすっきり忘れるべきだ。
0302デフォルトの名無しさん
2005/03/25(金) 09:01:09例えばどんなだったら良い感じか、代案キボン。
あくまで例えばで。
0303301じゃないけど
2005/03/25(金) 09:11:29SETSOCK(&clsock, onaccept, onread, onclose)
addsock(&svsock,&clsock);
//あとはコールバック
0304デフォルトの名無しさん
2005/03/25(金) 09:18:120305& ◆hJb7GWrzxo
2005/03/25(金) 11:20:39288で起きている問題はある種のデッドロックでしょうか。
それとも別の問題が原因だけど見かけ上そうみえるだけなんでしょうか。
0306おしえて厨
2005/03/25(金) 14:27:55http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22661
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22662
これは単なるUDPでhellow worldを送信するコードと受信するコードを
ちょっといじったものです。
senderは100回hello worldを送信しつつ、現在何回目のhello worldかも
表示していきます。
receiverは100回受信します。現在何回目の受信かも表示していきます。
この二つを立ち上げて、100回目の送信が終わったとき、
受信側の受信回数をみると、100回ではなく60回前後のままです。
なぜこうなるのですか。それがUDPってもんですか。
0307デフォルトの名無しさん
2005/03/25(金) 14:30:340308デフォルトの名無しさん
2005/03/25(金) 14:35:31同一PCならなおさら落ちてもおかしくない。
0309デフォルトの名無しさん
2005/03/25(金) 14:36:030310デフォルトの名無しさん
2005/03/25(金) 14:45:380311デフォルトの名無しさん
2005/03/25(金) 14:51:550312デフォルトの名無しさん
2005/03/25(金) 15:10:430313デフォルトの名無しさん
2005/03/25(金) 15:14:11pingはICMP
0314& ◆hJb7GWrzxo
2005/03/25(金) 15:18:31TCPの場合はバイト配列じゃなくても送受信できるんかね?
int型の二次元配列をバイト配列に変換するようなことしなくても送れますか
0315デフォルトの名無しさん
2005/03/25(金) 15:23:22これはバイト配列じゃない!って認めなければできるんじゃない?
0316デフォルトの名無しさん
2005/03/25(金) 15:27:55sendmsg/recvmsg(またはwritev/readv)のことか?
0317& ◆QWv3R1XL8M
2005/03/25(金) 15:52:18(java&windows XPの環境で)
0318デフォルトの名無しさん
2005/03/25(金) 16:00:29bb.put(n[0].length);
for ( //略
0319デフォルトの名無しさん
2005/03/25(金) 16:22:45#define _recvfrom(a,b,c,d) int clen=sizeof(c); recvfrom(a, b, sizeof(b), 0, c, &clen)
#define time_init(a,b,c,d) fd_set fs; timeval tv; FD_ZERO(&fs); FD_SET(a, &fs)
#define time_recvfrom(a,b,c,d) time_init(a,b,c,d); tv.tv_sec=d; if(0>select(NULL, &fs, NULL, NULL, &tv)){return -1;}; _recvfrom(a,b,c,d)
/* time_recvfrom(SOCKET s, char FAR *buf, struct sockaddr FAR *from, int timeout) */
こんな感じので良いの?
0320デフォルトの名無しさん
2005/03/25(金) 16:24:53くぁwせdrftgyふじこlp;@:
汚すぎ
無理して#define使わんで関数使えよ馬鹿
0321デフォルトの名無しさん
2005/03/25(金) 17:06:37式にならないマクロは大文字で書いた方が良いと思うけど。
do {〜}while(0)使うとか。
0322デフォルトの名無しさん
2005/03/25(金) 17:10:54なんだよ return -1 て。
0323デフォルトの名無しさん
2005/03/25(金) 19:26:50recvfrom() の返り値はチェックしてないし、
select() が EINTR を返した場合のケアもないし、
_で始まる名前はシステム側に予約されているから、
アプリケーションが勝手に使うのは規約違反だし。
なぜたかが3行のプログラムで、これだけ(ry
0324デフォルトの名無しさん
2005/03/25(金) 19:48:40これ書いてない本多いね。
『Winsock2.0プログラミング』(ソフトバンク)
には
selectの戻り値の説明に
>指定の条件を満たす記述子の総数、0(timeoutパラメータ値が満了した場合)、またはSOCKET_ERROR。
と書かれてる。
そのまま鵜呑みにすると、>>319のように0>の判定だけで済まそうとする人続出の悪寒
最近は入門書が、わかってない人が書いてるのが困り物。
0325デフォルトの名無しさん
2005/03/25(金) 19:51:39自分用に作られたラッパーなんてこんなもんでしょ。
汎用性を重視するならともかく、限られた状況であれば、戻り値も想定の範囲内だけで十分。
0326デフォルトの名無しさん
2005/03/25(金) 19:54:000327デフォルトの名無しさん
2005/03/25(金) 19:54:09おいおい、お前も突っ込みどころ満載だな
0328デフォルトの名無しさん
2005/03/25(金) 19:55:270329デフォルトの名無しさん
2005/03/25(金) 19:56:36システムコールや標準ライブラリに入れろつーのはおかしな話だ。
0330デフォルトの名無しさん
2005/03/25(金) 19:57:420331デフォルトの名無しさん
2005/03/25(金) 20:08:24わかってないのはおまえ。
もはやWSAEINTRが上がる事なんてない。
0332デフォルトの名無しさん
2005/03/25(金) 20:13:12>>324が例示している「Winsock 2.0」ならその通りだよね・・・
Unixの類ではsignal受けたときなどにEINTRが帰るのかな。
0333デフォルトの名無しさん
2005/03/25(金) 20:23:46UNIX上では、signal処理の設定の状況によってはEINTRが返る。
SIG_IGNやSA_RESTARTを指定してた場合には返らないけど。
0334デフォルトの名無しさん
2005/03/25(金) 20:52:400335デフォルトの名無しさん
2005/03/25(金) 20:53:49嘘つけ。いまどきEINTRが返らないUNIX系OSなんてないよ。
あるなら例を挙げてみろ。
0336デフォルトの名無しさん
2005/03/25(金) 20:54:19商用でないUNIXとは?
0337デフォルトの名無しさん
2005/03/26(土) 00:52:46がある (ブロックさせないためには、socket の non-blocking
モードにして、errno == EAGAIN をチェックする必要がある) って
話が、akr さんの日記に出てたね。
0338デフォルトの名無しさん
2005/03/26(土) 02:17:43>プログラム板の鉄則は、3行以上の長文を書くと殆どの確立で穴を掘り突っ込まれる。
今さらながら、このたった1行の日本語にもつっこみどころがある件について。
0339デフォルトの名無しさん
2005/03/26(土) 05:23:030340デフォルトの名無しさん
2005/03/26(土) 06:29:070341デフォルトの名無しさん
2005/03/26(土) 06:31:170342デフォルトの名無しさん
2005/03/26(土) 06:37:18Winでもkqueue試してみたいよ・・・
0343デフォルトの名無しさん
2005/03/26(土) 06:57:400344デフォルトの名無しさん
2005/03/26(土) 06:58:370345デフォルトの名無しさん
2005/03/26(土) 07:27:05NTならIO完了ポートがあるじゃあないか。
0346デフォルトの名無しさん
2005/03/26(土) 07:57:390347デフォルトの名無しさん
2005/03/26(土) 13:42:08現在selectの直後にrecvをループで回す関数を用意して、
指定バイト数分のデータを受信するような作りにしています。
この場合ブロッキングにしてると、
recvしている関数から抜けられなくなってしまいそうなので、
ノンブロッキングにすることにしました。
(最初の数バイトはソケットに届いたが、
それ以降のデータが届かなかった場合などを懸念しています)
ノンブロッキングにした場合はEWOULDBLOCKの判定をしなければいけないと思いますが、
EWOULDBLOCKなら無条件にrecvをリトライするような作りにしてしまうと、
ブロッキングの時と同じくrecvしてる関数から抜けられなくなってしまいますよね。
そこで一定回数リトライしてもEWOULDBLOCKが返ってくる場合は
エラーにするという処理にしようと思うのですが、
考え方としてあってますでしょうか?
いろいろ調べてみたのですが、具体的な方法が書いてあるところが見つからなくて。
EWOULDBLOCKとはどういう状態なのかとか、
ノンブロッキングの時にはEWOULDBLOCKを考慮する必要があるとかが
書いてあるところは腐るほど見つかったんですが。
0348347
2005/03/26(土) 13:43:160349デフォルトの名無しさん
2005/03/26(土) 14:12:490350デフォルトの名無しさん
2005/03/26(土) 14:40:58対象のソケットをselect()して読める時だけrecv()する。
0351347
2005/03/26(土) 15:26:53なるほど。
毎回recvの前にselectしてデータの到着を確認しておけば、
recvではまることはなくなりますね。
ん??そうするとわざわざノンブロッキングにしないでも
ブロッキングのままでOKということですよね?
ノンブロッキングがなんのためにあるのかがわからなくなってきた・・・
0352デフォルトの名無しさん
2005/03/26(土) 16:01:02EWOULDBLOCKが返るか、失敗するまでrecv()しまくればいいだろ。
0353デフォルトの名無しさん
2005/03/26(土) 16:29:35一度にひとつのselect文でやろうとすると
0354デフォルトの名無しさん
2005/03/26(土) 16:53:19inline int time_recvfrom(SOCKET s, char FAR * buf, struct sockaddr FAR * from, int timeout)
{
fd_set fs;
timeval tv;
FD_ZERO(&fs);
FD_SET(s, &fs);
tv.tv_sec=timeout;
if(0>select(NULL, &fs, NULL, NULL, &tv)){
return -1;
}
int clen=sizeof(from);
return (recvfrom(s, buf, sizeof(buf), 0, from, &clen) );
}
0355デフォルトの名無しさん
2005/03/26(土) 17:02:050356デフォルトの名無しさん
2005/03/26(土) 17:11:46良いと思う。
っていうか、全く同じコードが某入門書に書いてるなw
0357デフォルトの名無しさん
2005/03/26(土) 17:17:35select() の最初の引数はホントは int だし。(たまたま平気としても)
sizeof(form) も sizeof(buf) も 4 にしかならねーぞ。
0358デフォルトの名無しさん
2005/03/26(土) 17:18:390359デフォルトの名無しさん
2005/03/26(土) 17:28:05無理だったら、それは無視されてるわけじゃないわけだから、Winsockの規格違い
0360デフォルトの名無しさん
2005/03/26(土) 17:34:38Winsock でも void* とかではなくて int だよ。無視されるとしてもね。
0361デフォルトの名無しさん
2005/03/26(土) 17:36:57っていうか、何入れれば良いんだ?
他に手ごろなのが思いつかん。
0362デフォルトの名無しさん
2005/03/26(土) 17:56:500363デフォルトの名無しさん
2005/03/26(土) 18:00:300364デフォルトの名無しさん
2005/03/26(土) 18:01:18陸、○、空オンラインっていうゲーム
おもしろそうだ!
プログラマ募集してるんだって
0365デフォルトの名無しさん
2005/03/26(土) 18:02:45陸、○、空オンラインっていうゲーム
おもしろそうだ!
プログラマ募集してるんだって
0366デフォルトの名無しさん
2005/03/26(土) 18:03:38如何にも何も作れなさそうな主催と
そのウォッチャーのスレだった
0367デフォルトの名無しさん
2005/03/26(土) 18:37:55どうしてもサイズ指定を省略したいってなら、#defineでかいたら?
関数にすると、sizeof()は4しか返さないぞ。
0368354
2005/03/26(土) 18:39:06スマソ
0369デフォルトの名無しさん
2005/03/26(土) 18:40:340370デフォルトの名無しさん
2005/03/26(土) 18:40:36おいおい…
inlineと#defineを一緒にするなよ
0371デフォルトの名無しさん
2005/03/26(土) 18:41:23inlineはC++からだから、恐らくCしかやった事無いのにちょっと頑張ってみました ってタイプと俺は見たw
0372デフォルトの名無しさん
2005/03/26(土) 18:41:26それどころか、主催の奴のサイトからリンクたどっていったら、
他のMMOを作ろうコミュニティからはじき出された鼻つまみ者だったよ。
0373デフォルトの名無しさん
2005/03/26(土) 19:23:44Cでも使うよ。ときどき。
0374デフォルトの名無しさん
2005/03/27(日) 01:36:35かかわらず、すべての関数が非ブロッキングになるのでしょうか?
例えば、connect だけブロックするという使い方は出来ないのでしょうか?
0375デフォルトの名無しさん
2005/03/27(日) 17:46:48C99なら普通に使えるけどな。
0376& ◆D3ra0B2LiQ
2005/03/28(月) 12:09:30http://www.hellohiro.com/socket.htm
ここのサンプルコードをみると、バイト配列に変換してなくてもデータを
サーバに送信できるみたいなんですが、
こういうことはString型以外のデータ型でもできるんですか?
いちいちバイトに変換しないと送受信できないのかと思ってたので気になるんですが
0377デフォルトの名無しさん
2005/03/28(月) 12:25:21readLineはバイト配列を改行コード又は\0まで読み込んで
末尾に\0に据えて文字列として一行分取得するメソッドだ。
String以外のデータもじゃなくて、Stringもバイト配列でやってんだよカス
0378デフォルトの名無しさん
2005/03/28(月) 12:53:40Javaの仕様上の疑問は、”殆ど”の物がSDK添付のソースコードを参照することで解決する。
疑問に思ったら、人がああやってるのはどうして?の前にソース読む位の気合持てよ。
0379デフォルトの名無しさん
2005/03/28(月) 12:55:460380デフォルトの名無しさん
2005/03/28(月) 12:59:04アライメントに気をつけ、きちんと4バイトで割り切れる構造体を作ったとして
それをsend()で送った場合、正常に送信先に整列されたまま届かない可能性ってありますか?
その場合、どのような原因が考えられるのでしょうか?
よろしくお願いします。
0381デフォルトの名無しさん
2005/03/28(月) 13:05:09ただ、その確率が低いだけで
0382デフォルトの名無しさん
2005/03/28(月) 13:26:03電線の中を信号が通るときは4バイト単位もくそもないから
それを実現するのはアプリケーション層で
もしあれならきちんと受信するよう管理するラッパーを
つくつくつくればいいんじゃない?
0383デフォルトの名無しさん
2005/03/28(月) 13:26:29可能なのでしょうか?
httpdはApache2です。
0384デフォルトの名無しさん
2005/03/28(月) 17:08:55スレ違い。
0386デフォルトの名無しさん
2005/03/29(火) 10:23:16winsock.hに含まれていないものが多いのですが、何のためにあるのでしょうか?
0387おしえて厨
2005/03/29(火) 13:01:00TCPでint型二次元配列を送受信しようと
ちみたちのアドバイスやサンプルやドキュメント調べながらこんなコードを書いてみたけど
エコーが返ってきません。
どこか間違ってるところある??
0388デフォルトの名無しさん
2005/03/29(火) 13:54:40インデントもそろってなくて自分でデバッグも出来ない様な、
きたねぇソース書くな。
クライアントコード側の37行目と39行目がヒントだ。
あとは自分でどうにかしろ。ヒント通りにデバッグすりゃ動く。こっちで確認した。
こんなのネットワークプログラミングの質問じゃねぇぞ。
いいかげんにしろ。糞ガキ。
0389& ◆hJb7GWrzxo
2005/03/29(火) 14:09:56thx。
0390デフォルトの名無しさん
2005/03/29(火) 14:25:18UNIX-Socketとの互換性維持じゃないのかな。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/resolver.3.html
0391デフォルトの名無しさん
2005/03/29(火) 17:13:34> コピペしたんだかなんだか知らんけど、
ココ(↓)のソースそのまんまだよ。
http://www.hellohiro.com/socket.htm
きっとコイツは全く何にもこれっぽっちも自分では考えちゃいない。
無視するが吉。
0392デフォルトの名無しさん
2005/03/29(火) 17:18:060393デフォルトの名無しさん
2005/03/31(木) 12:15:29切り替えながら使うってのはOKでしょうか?
何か問題あるのでしょうか?
0394デフォルトの名無しさん
2005/03/31(木) 19:12:03ブロックするしないにしか関係しないから。
0395デフォルトの名無しさん
2005/03/31(木) 22:24:59そうですか、ありがとうございます。
心配しているのは、タイミングによって
通知(イベント)が受けられない事はないか?です。
このような使い方をしている人はいるのでしょうか?
0396デフォルトの名無しさん
2005/03/31(木) 23:03:12プログラマをはじめて幾年月立つが、そんな使い方は初めて聞く
0397デフォルトの名無しさん
2005/03/31(木) 23:24:48はじめからそういうフレームワーク用意して欲しいね。
0398デフォルトの名無しさん
2005/04/01(金) 00:03:060399デフォルトの名無しさん
2005/04/01(金) 00:12:34だったらいくつか用意してある。
0400デフォルトの名無しさん
2005/04/03(日) 19:58:27偉い人には分からんのです
0401デフォルトの名無しさん
2005/04/03(日) 20:52:180402デフォルトの名無しさん
2005/04/03(日) 23:42:160403デフォルトの名無しさん
2005/04/05(火) 02:09:53サーバー側は WSAAsyncSelect で FD_ACCEPT を登録して、
クライアント側は同期で connect しています。
ローカルでのテストではうまく FD_ACCEPT が呼ばれるのですが、
自分のポートを開いて、グローバルテストをしたときに
なぜか FD_ACCEPT が呼ばれるまでの間に遅延があります。
クライアント側の connect は瞬時に終わっているので、接続は確立していると思うのですが。
グローバルで動かした場合にこのような事態にあることってあるんでしょうか?
0404デフォルトの名無しさん
2005/04/05(火) 02:32:54> 自分のポートを開いて、グローバルテストをしたときに
ってなんやねん?
0405デフォルトの名無しさん
2005/04/05(火) 02:49:21この場合なら 100.100.100.100:3000 に接続。
0406デフォルトの名無しさん
2005/04/05(火) 03:05:450407デフォルトの名無しさん
2005/04/05(火) 03:32:31さきほど、なんかいか同じことを繰り返していたら、うまくいきました。
しかし、すこし時間がたつと同様の現象になってしまいました。
もしかしたらプロバイダー側の制限なのかもしれません(DIONです)。
ポート番号を変えていろいろと試してみます。
0408デフォルトの名無しさん
2005/04/05(火) 07:07:09可能な場合ってルーターが誤魔化しているだけで実際はWANにデータは出てないと思った。
0409デフォルトの名無しさん
2005/04/05(火) 09:37:56何言ってんだかよくわかんないんだけど、
> えっと、要するにローカルからローカルに接続するんですはなくて、
これはループバックアドレス(127.0.0.1)、あるいは、
自分のインターフェースに付けられたアドレスを接続先アドレスに、
> WAN にして接続するということです。
は、自分のインターフェースに付けられたアドレスじゃなくて、
ルータの外側に付けられたアドレス(つまりNAT環境)を接続先アドレスにしてるって事?
燃しそうなら正直ルータ次第だな。
>>3のwindumpでパケットキャプチャしてみてちょ。
0410デフォルトの名無しさん
2005/04/05(火) 11:48:37>ルータの外側に付けられたアドレス(つまりNAT環境)を接続先アドレスにしてるって事?
そうです。
ポートを 21 (FTPと誤解させるため)にしてみたら、うまくいきました。
なにやらプロバイダの制限くさいです。
みなさんどうもありがとうございました。
0411デフォルトの名無しさん
2005/04/06(水) 00:11:10提供したプログラムのlistenポートが落ちてクライアントが接続できなくなる事があって困ってます。
テスト環境を作りたくて考えてますが思いつきません。
OSはMSが出してるWindows2000ってヤシです。
0412デフォルトの名無しさん
2005/04/06(水) 00:19:44listenキューの数を越えてるって事は無いの?
0413デフォルトの名無しさん
2005/04/06(水) 00:26:03netstat -an | grep <portnum> とすると LISTENING がありません。
キューの限界超えると、そうなりますか?その辺は勉強不足です。
すんません。
0414デフォルトの名無しさん
2005/04/06(水) 00:26:10制御用のポート別に立てておけばいいだろ
0415デフォルトの名無しさん
2005/04/06(水) 00:44:06うん。接続待ち状態でブロックか、タイムアウトで接続できないか。
ちなみに、そのアプリの正規の切断手順では
1. クライアント側から切断
2. サーバー側から切断
3. 状況に応じてどちらからかは分からない。
0416415
2005/04/06(水) 00:46:49切断手順は1〜3のどれかな?
>>414
切断時のTIME_WAITかなんかで、ソケットが残ってる状態で
接続を繰り返すような作りになってた場合、コントロールポート用意しても
おなじ事になる恐れがあると思う。
0417デフォルトの名無しさん
2005/04/06(水) 00:58:16正規の切断手段はクライアントからの切断ですが、アプリレベルのシーケンス異常が
起こった場合はどちらからでも切る恐れがあります。
ちなみに、切れたときの状況はつかめて無いのですが、繋がらないと連絡を受けてか
ら netstat -an の状態を見ると、そのポート宛では LISTENING も TIME_WAIT も
とにかくそのポートに関係あるものは何も残ってません。
listen のキューがあふれたときサーバの listen ポートが閉じられるのであれば、
TIME_WAIT を沢山作ったり接続を山ほど行ったりすれば現象が再現するのでしょうか?
同じライブラリ(自作)を使って、今まで遭遇した事の無い現象なので、途方に暮れ
てます。
0418デフォルトの名無しさん
2005/04/06(水) 01:19:01>>うん。接続待ち状態でブロックか、タイムアウトで接続できないか。
ごめん。コレ間違い。
キューが一杯の場合
クライアント側にECONNREFUSED(10061)が返って、エラーで接続できない。
クライアント側のエラー値で確認してみたらどうかな?
>>TIME_WAIT を沢山作ったり接続を山ほど行ったりすれば現象が再現するのでしょうか?
listen()に指定したキュー数を超えた接続をすれば、上記の状態になる。
0419デフォルトの名無しさん
2005/04/06(水) 07:00:37ですよね。。。キューを超えても拒否られるだけでlistenポートは閉じませんよねぇ。
だめだ。。。お手上げ・・・|||| _| ̄|○ ||||
せめて現象を再現出来れば手の施しようもあるんだけど・・・
気になるのが、ウィルスバスターなんかについてる、ポート閉じる機能。あれが動いたら
listenしてるポート閉じるとか、そんな現象聞いたことありませんか?そのパソコンにも
VBコーポレートエディションとかいうヤシ入ってるらしくて・・・
それなら頑張ってPCとソフト揃えれば出来るかも。
今、テスト出来る環境が無いので調査出来ないんですが・・・
ZoneAlarm で似たようなことしてみようと思ったけど、昔と感じが変わってて、戸惑った
あげく、出来なかった・・・漏れ、餓鬼・・・・|||| _ト ̄|○ ||||
0420デフォルトの名無しさん
2005/04/06(水) 10:40:24てゆうか、サーバ側を直接デバッグってできんの?
0421デフォルトの名無しさん
2005/04/06(水) 11:12:03ヒント等頂けないでしょうか?
内容ですが、win2k&C#で SocketのRAW・RCVALLを使ってglobal/privateIPは
スニファ出来たんですが[127.0.0.1]のIPを指定した場合、IOControlで
SocketException例外落ちで上手く動いてくれないんです。
検索してみたんですが参考にしたソースと同じコードだったり、他のソフトとかも
IP指定方法がアダプタやソフト側で取得したIPから選択などloopback側を
見れるソフトも方法もみつかりませんでした。。。
C/C++/C#/VBでも何でもいいのでなんらかしらの情報/情報先を
教えてもらえないでしょうか。。。
どうかよろしくお願いします。
0422デフォルトの名無しさん
2005/04/06(水) 16:28:56俺には何がいいたいんだかさっぱりなんだが、
みんなよくわかるな。誰か翻訳して。
0423デフォルトの名無しさん
2005/04/06(水) 16:31:06サーバ側のプロセスは終了してません。これは保証できます。
プロセスは終わってないけど、listen が異常終了している恐れはあります。
でも、なぜそのような現象が起こるかが知りたいのです。
同じモジュールを使用していて今までそのような現象に遭遇したことが無いので、
ローカル環境でデバックしたいと思ってます。そのために現象をローカル環境で
再現したいと思ってます。
それと、残念ながら、現地のサーバは手軽に触れるところには無いのです_| ̄|○
0424デフォルトの名無しさん
2005/04/06(水) 16:39:23> listen が異常終了している恐れはあります。
調べろ!この糞が!
> それと、残念ながら、現地のサーバは手軽に触れるところには無いのです_| ̄|○
言い訳はいいから。
0425デフォルトの名無しさん
2005/04/06(水) 16:45:400426デフォルトの名無しさん
2005/04/06(水) 17:03:43う〜ん。。。異常終了してるかどうかはこの際関係なくて、異常終了させることが
出来るかどうかをしりたいんですね。ってか、そういう事が起こること自体不思議
で、どんな条件があればそうなるのか知ってる人がいれば、と思ったんですが。
ここの住人は賢い人が多そうなので・・・
それと、言い訳ではなく、手軽に触れられないから、同じ状態をローカルで構築し
たいんですね。それで現象を再現できて、その対策を講じることが出来れば、それ
で良し、です。
>>425
かもしれません。し、そうじゃないかもしれないです。
少なくとも listen ポートが落ちた後再立ち上げ処理を入れてないのはバグです。
それは直します。が、再立ち上げ処理を入れたところで、何かの問題で立ち上がら
ない状態になるかもしれません。その状態が再現できればテストがローカルで出来、
先方に説明も出来そうです。
が、そろそろ S/N 比が落ちる頃なんでしょうかね。
ここでの情報収集は限界かな?
サーバにデバッグ環境突っ込んで常に監視出来れば手っ取り早いんですけどね。
そういう環境でしか開発したことが無い人が羨ましいわ(w
0427デフォルトの名無しさん
2005/04/06(水) 17:14:13オマエは事務員にでもなったほうがいい。
0428デフォルトの名無しさん
2005/04/06(水) 17:23:04listen()を落とす方法を知りたがる気持ちは分からなくも無いけど、
ここで、君が知らなければならないことはそう言うことではないはず。
今まで問題が無かったモジュールを使っていて初の現象とも言っているが、
今まで運が良かったと言う可能性は0ではないだろうし。
どうも、話を聞いている分には、サーバーは自社開発じゃなくて以前から導入済み、
クライアントは自社開発って事なんだと思うけど、
(サーバーも自社開発なら、ローカルでの環境構築は通信部分に限ればは苦ではないはず。)
客側からの情報で、最低限どの程度の時刻に落ちるのか等の情報は、得てるでしょ。
そうすれば、その時間帯に起こるトランザクションも見えてくるんじゃないかな。
(客によっては、トランザクションのサンプルも取らせてくれるだろう。)
まず、エラーの再現ではなく状況の再現が先なんじゃないかなぁ。
デバッグするにしても手順と考え方がちとずれてるような気がする。
>>サーバにデバッグ環境突っ込んで常に監視出来れば手っ取り早いんですけどね。
>>そういう環境でしか開発したことが無い人が羨ましいわ(w
君のような環境でデバッグするなんて事はいくらでもやったが、
順を追っていって解決できなかった案件は今の所ないけどなぁ。
0429デフォルトの名無しさん
2005/04/06(水) 17:24:36了解。事務員になってオマエをクビにします。
0430デフォルトの名無しさん
2005/04/06(水) 17:30:25再現させようにも、お前は状況すら把握してないだろ。氏ね!
0431デフォルトの名無しさん
2005/04/06(水) 17:30:48丁寧な説明ありがとー。
サーバもクライアントも自作です。
私も今まで順を追って作業して解決しなかった事は無いです。
今回は「なぜ、それが起こるのか」「どう解決したのか」を客先に報告する必要が
あります。そのため、「なぜ、それが起こるのか」を突き止めたいのです。
そのために状況の再現をしたいのですが、ローカルではいくら同じような環境にし
ても現象が発生しないのです。
唯一の手がかりが「何らかのタイミングで listen ポートが閉じられている」と
いう事実のみです。
これはプログラムのログから判断してます。全接続が一気に切られて、それ以降、
接続のログが残りません。プロセスは動きつづけています。
そこで、なんとかして listen ポートを閉じてみたいと思っています。
それが出来たら、「オタクらうちが入れたサーバに何かしてない?」と問い詰めて
責任範囲を限定していきたいと思っています。
説明下手ですんません。
0432デフォルトの名無しさん
2005/04/06(水) 17:35:360433デフォルトの名無しさん
2005/04/06(水) 17:39:55サーバの状況を調べろ。
0434デフォルトの名無しさん
2005/04/06(水) 17:42:00listen()とaccept()の区別すらついてない奴は。
TCP接続のACCEPT状態うんぬんなんてまるで理解してないよ。
放置しる
0435デフォルトの名無しさん
2005/04/06(水) 17:43:59ごめん。既にスレ違いの方向に流れてるから、俺のレスはこれで最後だと思ってくださいな。
客先への詳細報告が必要なのは当然でしょう。
ローカルで再現しないってのを、もっと早く聞きたかったなぁ。今始めて聞いたよ。。
あと全接続が切られるっていうのは、
その瞬間においてサーバーから切断なのか、クライアントから切断なのかが分からないし。
下手すりゃ、物理的な切断の可能性は?って事もわからない。
(例えば無線LAN使用時など)
あと、全体的に受け取れる感想なんだけど、まず自分のことを疑ってないね。
そりゃ技術屋だし、自分の技術には最低限自信もあるだろうけど、
同一システム上の他のネットワーク関係もおかしいなら話は別だけど、そうではなさそうだし、
貴社製作アプリケーションでしか再現しない不具合なら、
最初に疑うのは自分で有るべきだと思う。
最後に、予想で物を言わせてもらうんだが、
接続が全切断しているってことだけど、それがサーバーからの切断と”仮定”した場合、
接続中に起こりうる処理の中に不具合があり、その為例外的に
切断処理のコードに飛んでしまうことも考えられると思う。
てか、どういう仕組みのアプリか分からないし、通信だけが原因かも特定できてないから、
これ以上言いようがない。
てことで、あとは頑張って。皆もスレ汚してごめんね。
0436デフォルトの名無しさん
2005/04/06(水) 17:45:24唐突に全コネクションが消失するなら、ネットワークカードの
トラブルで下位レイヤが落ちたとかも考えられるが。
0437デフォルトの名無しさん
2005/04/06(水) 18:00:34当たりです。
>>433
そうなんですかぁ。。。私は知らない。それを教えて欲しいなぁ。
サーバの状況ですか。Win2003 サーバ、VBコーポレートエディション、PCAnyWhere
くらいは入ってるかなぁ。当社から提供したのはアプリだけなので、他に何を入れら
れてるかわかりません。が、おそらく上記のものがメインです。
ちなみに、状況って?具体的には何が必要?見ることが出来るのは落ちてからしばらく
したあとの netstat -an くらい。関係するポートは一切なし。これは前も書いた通り。
>>434
listen と accept の違いがわからないってどこで気づいたんだ?もしかして、おぬし
超能力者か!?それもユリゲラークラスの!?
>>435
丁寧な反応ありがとー。
接続は全て有線。物理的に線を抜いても listen ポートは閉じない。ローカルテストで
確認済み。それと自分は常に疑ってる。だから、自分のプログラムデバッグしたい。
でも、現象が再現しないからテストも出来ない。で、現象を再現する手立てを模索中。
狙いは listen ポートを運用中に閉じること。
435ありがとー。がんばっちみる。
433、434以外の皆様スレ汚してスマソ
0438デフォルトの名無しさん
2005/04/06(水) 18:04:16最終的にはそこも疑ってる。既製品じゃ無いんだ〜(汗
0439デフォルトの名無しさん
2005/04/06(水) 18:08:470440デフォルトの名無しさん
2005/04/06(水) 18:17:31にしてから、また有効にしてみるというのはどう?
まあ、HWエラーなら、イベントビューワになんか出てる気もするけど。
0441デフォルトの名無しさん
2005/04/06(水) 18:30:100442デフォルトの名無しさん
2005/04/06(水) 18:35:44listenが異常終了とか言うから誤解したんじゃねーの?
0443デフォルトの名無しさん
2005/04/06(水) 18:38:34やってみましたが、それでは listen ポートは落ちない様ですね。
>>441
ネタなら、もう少しましなの考える。
0444デフォルトの名無しさん
2005/04/06(水) 20:14:08だったら、そのソケットをクローズしちゃったってのを
まず最初に疑うべきだと思うけど。
ハンドルをクローズしているところで引数を間違えてる
とか、そういう奴。
0445デフォルトの名無しさん
2005/04/06(水) 20:26:260446デフォルトの名無しさん
2005/04/06(水) 20:27:23listenは死なないと思うよ
eth0が無くてもloがあるし
0447デフォルトの名無しさん
2005/04/06(水) 20:33:220448デフォルトの名無しさん
2005/04/06(水) 20:35:42ちょっとその周り疑ってみる。ライブラリは実績あるし。それを使ってるヤシが怪し
いのには賛成。
>>446
その通り。
結局外部から listen ポートを落とすなんて荒業はあんまり聞かないって事で、使っ
てるヤシら、てってーてきに洗いなおしてみる。
でも、ローカルで同じ現象が出ないのがくやすい。。。_| ̄|○
0449デフォルトの名無しさん
2005/04/06(水) 20:50:240450デフォルトの名無しさん
2005/04/06(水) 20:51:29これの根拠は?
0451デフォルトの名無しさん
2005/04/06(水) 20:53:45ここの人ならすぐわかるでしょ。
0452デフォルトの名無しさん
2005/04/06(水) 21:07:47根拠は>>413の「netstat -anで LISTEN と出てない」って
いう症状でしょ。少なくともUNIX系なら、これは確実な証拠。
Windowsだと違うの?
>>451
クローズの引数間違えてるってのが当りだとすると、全然
関係ない部分でも起きうるから、ソース見るだけだと結構
面倒だと思う。もっともクローズ呼んでるところなんて、
そんなにないだろうから、全部の個所でログを吐くように
して症状を再現させれば、即効で判明すると思うけど。
0453デフォルトの名無しさん
2005/04/06(水) 21:10:230454デフォルトの名無しさん
2005/04/06(水) 21:16:34もらって、リモートからデバッガを attach して
様子を調べるとかするんだけどなあ。
デバッガから、対象となるソケットに対して accept()
や fstat() を呼びだしてみれば、どういう間違いを
犯したかぐらいは、すぐ判明する気がする。
こういうのって、Windows だとどうするのがいいの?
0455デフォルトの名無しさん
2005/04/06(水) 22:17:17tcpの切れ目が常にクライアントとサーバで同じと見なしたコーディング。 うちの
会社ではネットワークシミュレータ(パケットの遅延、ドロップ)をはさんでテストするよ。
こういうバグはそれですぐ引っかかる。
0456デフォルトの名無しさん
2005/04/06(水) 22:37:32packet drop すると listen してるポートが落ちるんですか?
0457デフォルトの名無しさん
2005/04/06(水) 22:44:330458デフォルトの名無しさん
2005/04/06(水) 22:47:30プロセスが最後の最後で死に切れてないだけ、とか。
0459デフォルトの名無しさん
2005/04/06(水) 22:49:52同じハンドル値に割り当てられて、select()待ちに入って
抜けてこないからaccept()が呼ばれないとかいうのは、
ありうるような。
実はaccept()のエラーを見てないだけだったりして。
0460デフォルトの名無しさん
2005/04/06(水) 22:53:48> 根拠は>>413の「netstat -anで LISTEN と出てない」っていう症状でしょ。
> 少なくともUNIX系なら、これは確実な証拠。Windowsだと違うの?
サーバはWindows(>>437)なのだが…
この話題止めない?
ろくな情報ももたらさず、(エラー処理&ロギングもなければ、パケットトレースもない)
プログラミングとは関係ない話(トラブルシューティング)するのは荒しと同じだよ。
後はWindows板でも行って。
>>427の言うように技術の話じゃないから、プログラマ板の方が適当かも。
0461452
2005/04/06(水) 23:10:38でもnetstat -anの状態表示に関しては、Windowsも
UNIXと同じだと思ってたんだけど、違うの?
この話はデバッグ時に実際に役立つから、ム板でいいよね?
0462デフォルトの名無しさん
2005/04/06(水) 23:54:54バグは要するにデータを誤って読むから論理が破綻してクラッシュしたり想定してない
異常処理にいく。 それで症状としてlistenしてない状態になるとか。 あくまでも
サーバーの論理の問題。
0463デフォルトの名無しさん
2005/04/07(木) 00:46:55ソケットがnetstat -naで捉えられないことは、
一部の呆け以外もうみんな分かっている。
じゃあ、何故なのか、それはサーバのプログラムを調べないと知りようがない。
少なくともaccept()がどうなっているかくらいは調べるべきだ。
これでもうこの話題はいいか?
0464デフォルトの名無しさん
2005/04/07(木) 01:13:28じゃ、Windows 上の netstat -an で LISTENING と出てる時
以外でも listen() 状態のことがあるってこと?
それはどういう場合?
@ITの記事を見る限り、Windows 上でも netstat -an の出力
は信用できそうなんだけど?
ttp://www.atmarkit.co.jp/fwin2k/win2ktips/234netstat/netstat.html
俺、@ITって、結構信用しているんだけどなあ。
ポインタのURLキボン
0465デフォルトの名無しさん
2005/04/07(木) 01:32:47状態でも LISTENING と表示されるらしい。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;418762
でも、今回の件のように listen() しているのであれば、
間違いなく LISTENING と出る筈。
0466デフォルトの名無しさん
2005/04/07(木) 01:33:33ちゃんと動作している間は LISTENING と出ているらしいので、当
てはまらない。
http://support.microsoft.com/default.aspx?scid=kb;ja;402147
いまどきNT3.5を使ってるとも思えないし、
0467デフォルトの名無しさん
2005/04/07(木) 01:34:25に関しては、今回話題になっているのと同様な問題が報告されている。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;307784#appliesto
これは、ISA Server の バグらしい。SP1を当てれば直る。
ひょっとして、ISA Server をインストールしている?
>>463が何を根拠に発言しているのかは良く分からない。
0468デフォルトの名無しさん
2005/04/07(木) 02:48:56> ソケットがnetstat -naで捉えられないことは、
修正します。
ソケットが存在しないことが、netstat -naで確認されていることは、
0469デフォルトの名無しさん
2005/04/07(木) 08:44:30それとエラーが返る可能性のある全てのAPIはちゃんとエラーチェックしてログ吐け。
ネットワークが関係ないレベルの話だ。
0470デフォルトの名無しさん
2005/04/07(木) 08:52:330471デフォルトの名無しさん
2005/04/07(木) 11:36:27申し訳ありませんでした。
0472デフォルトの名無しさん
2005/04/07(木) 16:28:59Linuxでサーバプログラムを作っています.
bindでIPアドレスを指定していますが,そのネットワークインタフェースの
IPアドレスが変更された後も,引き続き接続要求を待ち受けたいのです.
思いついたのは,いったんsocketをクローズしてはじめからやり直す方法ですが,
もっとスマートな良い方法はありますか?
0473デフォルトの名無しさん
2005/04/07(木) 16:36:13TCPならこれで無問題。UDPだと場合によりけり。
0474472
2005/04/07(木) 16:51:28どうもです.
Etherが2つあって,そのうちの1つだけでサービスを提供したいんです.
それでそのEtherのIPアドレスを使ってbind()していたんですが,
INADDR_ANYだとすべてのインタフェースから受け付けることになってしまいますよね?
ちなみに,TCPを使用してます.
0475デフォルトの名無しさん
2005/04/07(木) 17:03:03packet filtering ではじくって手があるけど。
それが嫌なら、やっぱりクローズしてやり直すのでは?
0476デフォルトの名無しさん
2005/04/07(木) 17:06:08> 要求を待ち受けたいのです.
(;´Д`)
0477472
2005/04/07(木) 17:49:38やっぱり,やり直すのが王道なんですかね?
クローズしてしばらくはそのPortが使えないみたいなことを言われて躊躇してまして...
0478デフォルトの名無しさん
2005/04/07(木) 17:59:22SO_REUSE{ADDR|PORT} のことか?
0480デフォルトの名無しさん
2005/04/08(金) 03:19:34> Etherが2つあって,そのうちの1つだけでサービスを提供したいんです.
INADDR_ANYで、接続受けてから、getsockname(2)して、
駄目な方な場合のみ即close(2)しちゃうって手もあるが。
これならサービスダウン期間ができないし。
0481デフォルトの名無しさん
2005/04/08(金) 16:37:16その手の方法でいいなら、自分で getsockname(2)
しなくても、libwrap をリンクして、安直に
TCP wrapper に任せちゃうって手もあるかもねえ。
0482472
2005/04/08(金) 17:24:41そうすねー,他人の書いたコードを流用するっていうんで,
先の考えになったんですけど,
こっちのやり方の方が良いように思いますね.
後は実装して,実験してどっちをとるかですかね...
0483デフォルトの名無しさん
2005/04/09(土) 06:55:02TCPのコネクションについてなんですが
こちらがSYNを送る
相手がACKを送ってくる
相手がSYNを送ってくる
こちらがACKを送る
これで接続が完了するようですが、最後のACKが正常に送れたかどうかのチェックはどうしてるのでしょうか?
送りっぱなしで相手に届いてない場合、相手の処理とか困るだろうし・・・
宜しくお願いします。
0484デフォルトの名無しさん
2005/04/09(土) 07:00:57ネットワークプログラミングではまるのは下位プロトコルの理解が足りないってUNPに書いてあった
0485デフォルトの名無しさん
2005/04/09(土) 07:06:56ちょっとこの前TCPの解説書としては定番の「マスタリングTCP/IP」を読んでみたが
下位レベルのプロトコルの説明が不十分で、接続に関しては本当に>>483くらいの事しか書いてなかった。
そのくせやけに他が詳しく書いてたり、バランスが足りないっていうか・・・
とりあえず、TCPの事しるには、洋書読むしかないよ。
もしくはその手のMLをROMしてると理解できる。
0486デフォルトの名無しさん
2005/04/09(土) 07:07:24あきらめるなりするのでわないの?
ACKの確認が必要なら、さらにその確認が必要で、さらにまた....
0487デフォルトの名無しさん
2005/04/09(土) 07:10:20質問の内容そのものに対しては一切触れてないことが多いんだが、本当にわかってるの?
質問スレで、質問そのものにウンチクするのって本当に無意味だと思うんだが・・・
そんな余力あるなら答えてやれよって思うのは俺だけ?
じゃあ俺が答えろって?正直言って俺は分らん
0488483
2005/04/09(土) 07:16:56>>486
なるほど、ではその場合
こちらは繋がってるつもりで、相手が繋がってないという状況になりますね?
この状態でデータを送って、もし送れなかったらコネクションを切ると言うことなのでしょうか?
0489デフォルトの名無しさん
2005/04/09(土) 07:26:12TCPのACKは、ACKパケットってのが特別にあるんじゃなくて、
全てのTCPパケットのヘッダに埋め込まれていて、
シーケンス番号のここまでは一つの欠けもなく全部受け取ったよって意味。
だから「バイトごとのACK」「TCPパケットごとのACK」って考え方だと、
その後の送出TCPパケットの全てにおいて、ACKを「再送」している、ことになっている。
つまりACKは接続が生きている間、ずっと送り続けている、ってのが、
あなたの質問にあわせた(考え方での)答え。
タコ本はこういうことはちゃんと解説できてない。
そういう意味であなたの疑問は非常にいいところを突いていた。
基本部分をちゃんと理解できているからそういう質問が出るんだろうね。
>>485
> とりあえず、TCPの事しるには、洋書読むしかないよ。
Steavensの「詳解TCP/IP」シリーズがあるじゃない。
あれは問題も解くと非常に非常に非常に力がつきます。
「マスタリングTCP/IP」については同じ考え。
0490489
2005/04/09(土) 07:30:07相手はSYNを送ってきているのだから、
接続を放棄するにはFINを送ってくるはずです。
相手が何らかの問題を抱えている場合、(FINを遅れないような)
ICMP(port unreachableなど)が送られてくる可能性もあります。
全く何も反応がなければ…どうしちゃったんでしょうね。
タイムアウトしかないですね。
http://www.faqs.org/rfcs/rfc793.html に、
ほとんどのことは、初級レベルだと全て、書いてありますよ。
0491483
2005/04/09(土) 07:45:02なるほど・・・
何もコネクションの時だけ、そのような処理をしてるわけじゃないんですね。
rfc793を読んで勉強してみます。
どうもありがとうございました。
0492489
2005/04/09(土) 07:57:24その前に>>2にある
>詳解TCP/IP〈Vol.1〉プロトコル
>http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
これ読むあるね。(>>489 Steavens→Stevens)
0493デフォルトの名無しさん
2005/04/09(土) 09:57:46翻訳物だけ買ってまつ。SSL/TLS編とかRTP編とか。
0494デフォルトの名無しさん
2005/04/09(土) 20:31:300495デフォルトの名無しさん
2005/04/10(日) 01:10:540496デフォルトの名無しさん
2005/04/10(日) 16:24:50というプログラムを書いてたんだけど、何故かデータが後半しか届かない。
おかしいと思ってキャプチャしてみたら
相手からのPSHに対するACKにデータの前半が乗ってた。
ふつー、こういうときって[PSH,ACK]にならないか?
TCP_NODELAYだとこうなるのかね・・・
識者の見解キボン
0497デフォルトの名無しさん
2005/04/10(日) 16:54:10socket()で得たディスクリプタの番号をbind()してsockaddrと結びつけますよね。
その後で、ディスクリプタ番号だけをひきずり回してプログラムを組みたいので
すが、ディスクリプタの番号だけからsockaddrを取得することはできますでしょ
うか。
やっぱりsockaddrもいっしょにひきずり回すしかないでしょうか?
0498デフォルトの名無しさん
2005/04/10(日) 16:58:46getsocknameとかgetpeernameとかでソケットから引ける気がする
0499496
2005/04/10(日) 17:03:45ようするに、piggybackを抑止すれば良さそう。
でもどうやって・・・?
0500デフォルトの名無しさん
2005/04/10(日) 17:06:51どうもありがとうございました。わかりました。
0501デフォルトの名無しさん
2005/04/10(日) 17:11:25wininetって欠片も出てきませんね。。
0502デフォルトの名無しさん
2005/04/10(日) 17:22:480503デフォルトの名無しさん
2005/04/10(日) 18:11:52誰も使わないの間違いだろ
0504デフォルトの名無しさん
2005/04/10(日) 18:20:58おまえは知ってるのか?
教えてやれよ
0505デフォルトの名無しさん
2005/04/10(日) 18:42:13相手がプライベートIPアドレスしか持ってない場合
その相手に関してユニークな情報ってありますか?
相手がプライベートIPアドレスしか持ってない場合、相手が二重にクライアントを起動していたら
送信先がわからなくなってしまうんで・・・
0506デフォルトの名無しさん
NGNGNAT使え
ってこと?
0507デフォルトの名無しさん
2005/04/10(日) 18:48:14いえ、途中でグローバルなノードを経由するので、ポートが正しく開いて無くても(NATを設定していなくても)到達出来るようにするつもりなのです。
ただ、その場合の、送信先をどのように定義すれば良いのかが・・・
0508デフォルトの名無しさん
2005/04/10(日) 18:53:49相手がクライアントなら二重起動(接続)されても
ソケットが二つになるだけだから、それで区別する。
あとはアプリケーション層で解決。個別IDなりなんなりを
クライアントから送らせるとか。
0509デフォルトの名無しさん
2005/04/10(日) 23:07:45そういうレベルの問題があるようなTCP実装は、
他にも大問題がボコボコあるに決まっているので、
早急に上司に相談して、別のまともな実装に乗り
換えるべし。
さもないとプロジェクトがオオゴケすると思われ。
0510デフォルトの名無しさん
2005/04/10(日) 23:37:51読んでも、状況が特定できんよ。
> 相手からのPSH
1. local ←[PSH+データ]− remote
> に対するACKにデータの前半が乗ってた。
2. local −[ACK+前半]→ remote
3. local −−[後半]−→ remote
ってことか?
PSHは受け手側のTCP moduleが勝手に取り除く可能性のあるflagだよ。
3.8. Interfaces, User/TCP Interface, TCP User Command, Receive (p.48, RFC793)
0511デフォルトの名無しさん
2005/04/10(日) 23:43:54TCPの接続は、
<localのIPアドレス、localのポート番号、remoteのIPアドレス、remoteのポート番号>
の四つ組でユニークに識別できます。世界で唯一です。(でなければルーティング不能)
OSのTCP moduleもこの方法で接続を識別しています。
NATやグローバルなノードでの<remoteのIPアドレス、remoteのポート番号>を得て、
NATやグローバルなノード先のことは気にしないでいいです。
それはNAT, LAN内で解決するべき事ですから。
そうしないとあなたのアプリはNAT透明性がなくなってしまいます。
0512質問age
2005/04/11(月) 00:07:37なんとか環境までは構築できて、HelloWorld はコンパイル&動作はできました。
次にいよいよソケットプログラミングなんですが、、、なんかこう、シンプルな
サンプルソースなぞはありませんか?
apacheとかのソースは膨大過ぎて・・・。
ttp://www.hellohiro.com/socket.htm
ぐらいのシンプルなのがあれば助かります。
0513デフォルトの名無しさん
2005/04/11(月) 00:11:130514質問age
2005/04/11(月) 00:18:20一応組込屋です。探したんだけど、Winsockのサンプルしかなくて。。。_| ̄|○
JavaやWinならサーバ側もクライアント側もやった事はあるんだけどね、
お客様がLinuxでやりたいとか仰ってトホホなんでつよ。。。
0515デフォルトの名無しさん
2005/04/11(月) 00:59:56TCP/IPによるネットワーク構築〈Vol.3〉Linux/POSIXソケットバージョン−クライアントサーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/
これ買いなよ。
それから、>>2の「Linuxソケットプログラミング」を。
さらに、>>1にあるProgramming UNIX Socket FAQは必ず全部読め。
0516512=514
2005/04/11(月) 01:19:04http://www.gihyo.co.jp/books/syoseki.php/4-7741-1031-0
そういや4年前Linuxの案件の時に随分と助けられた。
というわけでしこしこ組んでみるです。
0517デフォルトの名無しさん
2005/04/12(火) 00:08:29みんなlisten()しているポートを使用するということでOKでしょうか?
0518デフォルトの名無しさん
2005/04/12(火) 00:21:360519デフォルトの名無しさん
2005/04/12(火) 01:39:15OKです。
0520デフォルトの名無しさん
2005/04/12(火) 03:46:380521デフォルトの名無しさん
2005/04/12(火) 05:02:18TCPで
typedef struct{
int hoge1;
int hoge2;
char *hoge3;
}SEND_DATA;
こんな感じの構造体を送るようにしたんですが、
どうも上手く受信出来ません。
もちろん#pragma packを使ってアライメントの問題も解決してたはずなんですが・・・
なぜでしょう?
charが受信できないのです。
0522デフォルトの名無しさん
2005/04/12(火) 05:05:17Cの勉強し直して来い。
っていうか、これって前にも見た気がするんだけど。
釣られたのかしら。orz
0523521
2005/04/12(火) 05:11:25ホントだ・・・orz
いえ、さすがにこれは初めてですよ。
しっかし、配列あらかじめ固定にしてしまうのはちょっと無駄に感じてしまうんですけど・・・
どうにか可変長にする方法ってないですかね?
0524デフォルトの名無しさん
2005/04/12(火) 05:13:340525521
2005/04/12(火) 05:16:01それだと、構造体の大きさが送信側と受信側で変わってしまう事になりますよね。
受信側でキャストした時に正常に受信できるのでしょうか?
0526522=524
2005/04/12(火) 05:21:25キャストしなければ良いだけのことでしょ。
それに少なくとも、int 2つとlengthに関しては固定にはなるし。
charデータ実体だけ別処理でも良いんでは?
というか、後々の事と自分以外がメンテする時の事考えて、
俺の場合は、受信データをキャスト一発で処理っていうのは、
ほとんどやったことが無いよ。
あ、そうそう>>521での人違いゴルァはすまなかった。
そっくりなのを以前見たことがあったもんで。
0527デフォルトの名無しさん
2005/04/12(火) 05:24:43>>524=>>525
>>521=>>522
0528デフォルトの名無しさん
2005/04/12(火) 08:24:25int length;
char buf[1];
};
これとか。
0529デフォルトの名無しさん
2005/04/12(火) 09:22:25んなことないって。
0530デフォルトの名無しさん
2005/04/12(火) 10:37:57きっと、次の質問は
「データが1byteでは足りないのですが・・・」
の(゚∀゚)ヨカーン
lc.exeだと
struct SEND_DATA {
int length;
char buf[];
};
は通らないんだっけ?
0531デフォルトの名無しさん
2005/04/12(火) 11:13:30別に構造体は>>521のままで良くて、単に
void send_data(int sock, SEND_DATA *d) {
int32_t netint, len;
netint = htonl(d->hoge1);
write_nbyte(sock, &netint, sizeof(netint));
netint = htonl(d->hoge2);
write_nbyte(sock, &netint, sizeof(netint));
len = strlen(d->hoge3);
netint = htonl(len);
write_nbyte(sock, &netint, sizeof(netint));
write_nbyte(sock, d->hoge3, len);
}
みたいにしろって話でしょ。
(hoge3 の長さが strlen(d->hoge3) でいいかは
知らないけどさ)
#pragma pack で解決するってのは移植性悪いし。
0532デフォルトの名無しさん
2005/04/12(火) 11:35:40そう言う話だろうよもともとは。
0533デフォルトの名無しさん
2005/04/12(火) 12:14:36同じこと。
0534デフォルトの名無しさん
2005/04/12(火) 12:39:03>>523の「どうにか可変長にする方法ってないですかね?」
から始まる流れだとすれば、>>528や>>530は別に間抜けでもなんでもないと思うけど?
構造体を可変長っぽく扱うためのよくある方法を書いただけだし。
構造体のタグが一緒なのはちょっと間抜けっつーか、誤解を招くなとは思うけどさ。
0535デフォルトの名無しさん
2005/04/12(火) 15:15:25すぐに>>528や>>530のような解を勧めるのって変じゃない?
送りたいデータ形式が、アプリケーション内でSEND_DATAとは
別の構造で保持されているとすると、>>521の構造体の方が
無駄なメモリコピーが少なくて済む点でもマシだし。
アプリケーションで扱う構造そのままを渡すインターフェース
にする方がもっといいだろうけどね。
0536デフォルトの名無しさん
2005/04/12(火) 18:58:360537デフォルトの名無しさん
2005/04/12(火) 19:03:54便乗で質問ですが使用しているポート番号ってどうやって知りますか
0538デフォルトの名無しさん
2005/04/12(火) 19:17:190539デフォルトの名無しさん
2005/04/12(火) 20:06:26乗り換えるっていうか、同時に付き合ってるでしょ。
0540デフォルトの名無しさん
2005/04/12(火) 20:25:16いやいや、他の女に振り分けちゃうじゃん
0541デフォルトの名無しさん
2005/04/12(火) 20:28:390542デフォルトの名無しさん
2005/04/12(火) 20:36:540543デフォルトの名無しさん
2005/04/12(火) 22:51:00<192.41.192.40,80,192.168.0.1,1000>
<192.41.192.40,80,192.168.0.1,1001>
<192.41.192.40,80,192.168.0.2,1000>
は別の接続です。
0544デフォルトの名無しさん
2005/04/13(水) 00:21:270545デフォルトの名無しさん
2005/04/13(水) 00:36:160546デフォルトの名無しさん
2005/04/13(水) 00:40:160547デフォルトの名無しさん
2005/04/13(水) 01:54:30・WSAECONNABORTED
・WSAESHUTDOWN
これらってどんな場合にでるかわかる方います?
ノンブロッキングソケットを使っているのですが、
WSAECONNABORTEDしか出なくて・・・
0548デフォルトの名無しさん
2005/04/13(水) 06:57:49> ・WSAECONNRESET
http://support.microsoft.com/kb/263823
> ・WSAESHUTDOWN
既にshutdownしているソケットを使おうとした場合。
0549デフォルトの名無しさん
2005/04/13(水) 06:58:140550デフォルトの名無しさん
2005/04/13(水) 07:01:23ECONNRESETは相手がHARD CLOSEしたときや、keep-aliceで切断されたあと。
ESHUTDOWNは、shutdwon(SD_SEND)したあとにsendしようとしたとき。
に出るような事が書いてあるなぁ。
0551デフォルトの名無しさん
2005/04/13(水) 07:02:100552デフォルトの名無しさん
2005/04/13(水) 09:17:51なにげに >>543 をわかってない人もいると思うよ。
>>549 もそうだったりして。
0553デフォルトの名無しさん
2005/04/13(水) 11:33:28リンク先は障害情報では?
知りたいことですが、RST受けた時に、
ブロッキングソケットでは、WSAECONNRESET が返るのですが、
ノンブロッキングソケットでは、WSAECONNABORTED が返るので
何でかなぁってことです。
0554デフォルトの名無しさん
2005/04/13(水) 23:41:19下のコードで最後のsvcudp_create()がNULLを返すんですが、
理由が分かる方いますか?(errnoはEBADF。)
int sFd;
SVCXPRT *transp;
struct sockaddr_in addr;
sFd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = 0;
bind(sFd, (struct sockaddr *)&addr, sizeof(addr))
transp = (SVCXPRT *)svcudp_create(sFd);
socket()とbind()は正常に返ってきているんですが・・・。
0555デフォルトの名無しさん
2005/04/14(木) 17:33:32winsock初めて2日目の初心者です。
UDPで離れた場所との通信を行おうと考えています。
LAN内での通信は成功しました。
gethostname gethostbynameでhostent(ローカルIP)を取得し、sendtoで使用しました。
離れた場所との通信を実装する場合、sendtoで与えるhostentをグローバルIPにすれば良いと単純に考えているのですが、認識は合っていますでしょうか?
他の場所にマシンが無く、確認しようが無いのです。。。orz
(127.0.0.1 との通信はできました)
0556デフォルトの名無しさん
2005/04/14(木) 21:19:05認識はそれでOK
ただ、間にNATとかあると考えもの
0557デフォルトの名無しさん
2005/04/14(木) 23:51:31NAIのSnifferや、SmartBitsでできるような、任意のデータリンクフレームを
送出するという機能をもつツールを作ってみたいと思っています。
LinuxやBSDでは、PACKETやBPFで出来るようなのですが、
Windowsでこのようなものを作る時に使えるライブラリや手段等はありますでしょうか?
「NE2000の仕様を読んで自分でNICのドライバ書け!!」というのでなく、
LinuxでSOCKETを使ってできるくらいのボリュームだとありがたいのですが。
(raw socketで自由に記述できるのは、IP層のヘッダから、という認識でいいんですよね?)
0559デフォルトの名無しさん
2005/04/15(金) 00:54:390560デフォルトの名無しさん
2005/04/15(金) 01:59:19横だがポート0にバインドするってなんか意味あるの? やったら確かに成功するのだが
(特権も無いのに)。 ちなみに自分は上のコードでtransp帰ってきたよ。
0561デフォルトの名無しさん
2005/04/15(金) 05:04:29send()はブロッキング関数ですが
これは、相手とのsocketが無効になったなどの要因による送信不可の状況でも、永久ブロックしてしまうんでしょうか?
それともエラーを知らせる戻り値を返して終わりなのでしょうか?
私は後者だと思ってたんですが、ちょっとWinsockを勉強してるんですけど、どこかでブロックしてるんで
ここが怪しいと思うんですけど・・・
0562デフォルトの名無しさん
2005/04/15(金) 05:09:46もっと曖昧でないレベルになるまで調査してこい。
0563デフォルトの名無しさん
2005/04/15(金) 06:05:18バカは無理して答えなくていいよ?
0564デフォルトの名無しさん
2005/04/15(金) 06:24:080565デフォルトの名無しさん
2005/04/15(金) 06:27:14どこでブロッキングしているか調べられないなんて、問題外だと思います。
>>561
エラーとして処理すべきかしばらく待つべきなのか分からないことがあります。
分からない場合には、設定された時間(keepaliveタイマなど)だけ待ちます。
0566デフォルトの名無しさん
2005/04/15(金) 06:35:00>>562
>>564
>>565
561 名前:デフォルトの名無しさん :2005/04/15(金) 05:04:29
質問です。
send()はブロッキング関数ですが
これは、相手とのsocketが無効になったなどの要因による送信不可の状況でも、永久ブロックしてしまうんでしょうか?
それともエラーを知らせる戻り値を返して終わりなのでしょうか?
562 名前:デフォルトの名無しさん :2005/04/15(金) 05:09:46
>>どこかでブロックしてるんでここが怪しいと思うんですけど・・・
もっと曖昧でないレベルになるまで調査してこい。
563 名前:デフォルトの名無しさん :2005/04/15(金) 06:05:18
まあ無知なバカほど調査してこいって言うもんで
バカは無理して答えなくていいよ?
564 名前:デフォルトの名無しさん :2005/04/15(金) 06:24:08
バカ厨ウザ
565 名前:デフォルトの名無しさん :2005/04/15(金) 06:27:14
プログラマが、自分の書いたプログラムが、どこかでブロッキングしているのに、
どこでブロッキングしているか調べられないなんて、問題外だと思います。
0567デフォルトの名無しさん
2005/04/15(金) 06:39:35どうし様もねぇカスだな・・お前。
0568デフォルトの名無しさん
2005/04/15(金) 06:46:48>>567
567 名前:デフォルトの名無しさん :2005/04/15(金) 06:39:35
>>565がお前の質問に答えてくれてることすら理解できねぇのか。
どうし様もねぇカスだな・・お前。
0569デフォルトの名無しさん
2005/04/15(金) 06:50:410570デフォルトの名無しさん
2005/04/15(金) 07:01:49二度とこねーよこんなスレ
0571マイク ◆yrBrqfF1Ew
2005/04/15(金) 07:49:460572デフォルトの名無しさん
2005/04/15(金) 08:35:57エラーが起こればブロックしないで返ってくる。
winsock なら戻り値として SOCKET_ERROR が返ってきて、
その時に WSAGetLastError() を呼べば原因がわかることになっている。
0573デフォルトの名無しさん
2005/04/15(金) 09:05:23荒らされないためには、知らない奴は黙って見ていること。
回答だけするべし。
0574デフォルトの名無しさん
2005/04/15(金) 09:43:09UDPのポート番号0番は、NFSで使ってるろ。
RPCと関係あるんじゃない?
0575デフォルトの名無しさん
2005/04/15(金) 10:29:100番でbind()すると、ephemeral port を割り当ててくれるの。
実際に0番を使うわけじゃない。
0576デフォルトの名無しさん
2005/04/15(金) 13:38:350577デフォルトの名無しさん
2005/04/15(金) 17:10:02ポート番号が入っていない(0が入っている)
ってのと間違えた。
0579554
2005/04/15(金) 22:22:46/usr/ucblib/librpcsocをリンクしたらうまくいきました。
(OSがSoralis, SunOS5.6の場合はこれが必要)
rpcsocをリンクしなくてもコンパイル&リンクが
通っていたので油断してました。
お騒がせして申し訳ありませんでした。
0580デフォルトの名無しさん
2005/04/16(土) 03:01:31タイムアウトか何かでブロックしたままの状態になる場合があるのですが、
対策できませんか。
0581デフォルトの名無しさん
2005/04/16(土) 09:08:06HeartBeatメッセージのようなものを定期的に送受信して監視する。
0582デフォルトの名無しさん
2005/04/16(土) 10:17:03ソケットに関しては雑魚ですので、ご了承ください。
今、winsockを使用しインターネットを介しての通信に挑戦しています。
が、インターネットを介して(ルーターを介して? WAN?)の通信で詰まってしまいました。
(接続先は 230.216.110.??? ポートは8000・2340・2400と試してみましたが全部駄目でした)
ハブを介して(LAN?)の通信はできました。
(接続先は 192.168.0.? ポートは2340・2350、共に成功しました)
230.216.110.??? = グローバルIP
192.168.0.? = ローカルIP
と、自分は思い込んでいます。
質問は2つです。
�@sendtoで与えているローカルIPをグローバルIPに変えたのですが、通信できません。
この症状はどの様な事が考えられるのでしょうか?考えられる限り列挙していただけると幸いです。
「ルーターが通信をブロックしているのかな?」などと雑魚なりに考えています。
�A現在グローバルIPは、wininetを使用しcgi(Perl言語)にアクセスして、$ENV{'REMOTE_ADDR'}で取得しています。
もっと簡単に取得する方法は無いでしょうか?
以上です。
よろしくお願いします。
0583デフォルトの名無しさん
2005/04/16(土) 10:25:08なら、通信できなくて当然だなぁ。
グローバルIPの自分ってつまり、ルータのことになるんだが。
0584デフォルトの名無しさん
2005/04/16(土) 10:40:57NATで自分に割り当てらえているグローバルIPに、
自分自身が接続しようとしているって事?
それが出来るかどうかはルータ依存。
出来なくても何の不思議もない。
>>403と同じ状況?
0585デフォルトの名無しさん
2005/04/16(土) 10:45:45自己レス
WinPcapを使って、実現できました。
http://winpcap.polito.it/docs/docs31beta4/html/group__wpcap__tut8.html
0586582
2005/04/16(土) 11:15:57>>583
>ローカルIPの自分から、グローバルIPの自分にsendtoしたのか?
いえ違います。
別の場所(10km程離れています)のグローバルIPです。
>>584 さんも、同じ質問をしてくるって事は、
「sendtoで与えているローカルIPをグローバルIPに変えた」
これで上手く行くはずって事ですよね!?
>>403 さんとは似ていますが、違う様です。
これ書いてて思ったのですが、少々お馬鹿なデバッグをしていたのかも知れません。
�@に関しては保留させてください。確認してみます。
確認が終わったら報告します。
休日だというのに10km自転車で行かなきゃいけないのか。。。orz
すいません。
追加質問させてください。
�B皆さん、グローバル通信環境(?)でのデバッグってどうされてます?
ようするに別の場所のPCを扱いたいのですが。。。
0587デフォルトの名無しさん
2005/04/16(土) 11:19:470588582
2005/04/16(土) 11:22:13>「sendtoで与えているローカルIPをグローバルIPに変えた」
>これで上手く行くはずって事ですよね!?
↑これが出来ればローカル環境でデバッグできるじゃん。。。
なに言ってんだ俺。。。orz
0589デフォルトの名無しさん
2005/04/16(土) 11:25:580590デフォルトの名無しさん
2005/04/16(土) 13:27:26> �B皆さん、グローバル通信環境(?)でのデバッグってどうされてます?
プログラミング的には、別にグローバルだとかローカルだとか関係ない。
NATだけ気をつければ、何も変わりはない。
マ版的なデバッグ環境話としてはsshでログイン。
0591582
2005/04/16(土) 14:26:50>>587
φ(。_。)メモリますた。
>>589
φ(。_。)メモリますた。
>>590
φ(。_。)メモリますた。
意味が完全には理解できていないので、色々調べてみます。
0592582
2005/04/16(土) 14:27:14で、�@の確認の結果報告ですが、やっぱ駄目でした。。。orz
ですが、収穫があった様に思います。
作成したクライアントソフトを起動したのですが、
recvfromでSOCKET_ERRORが帰ってきているみたいなんです。
WSAGetLastErrorで調べる事ができると >>572 さんが書いていたので早速調べてみました。
結果は10054。MSDNで調べると、
WSAECONNRESET
(10054)
Connection reset by peer.
A existing connection was forcibly closed by the remote host.
This normally results if the peer application on the remote host is suddenly stopped,
the host is rebooted, or the remote host used a "hard close"
(see setsockopt for more information on the SO_LINGER option on the remote socket.)
This error may also result if a connection was broken due to "keep-alive" activity detecting a failure while one or more operations are in progress.
Operations that were in progress fail with WSAENETRESET. Subsequent operations fail with WSAECONNRESET.
でした。
英検4級の私には理解不能でした。。。orz
(当然、infoseek翻訳しましたよ。しても分からんのですヽ(`Д´)ノ)
0593582
2005/04/16(土) 14:38:02自宅も、10km離れたこのマシンもWin2000ですが、共にsp4です。
0594デフォルトの名無しさん
2005/04/16(土) 15:05:52selectが非ゼロ返してきて、recvするとblockするってことですか?
なんだか信じられないけど。
Unixの類ならSIGALRMでタイムアウトするようなラッパ関数を作って使うとか。
0595デフォルトの名無しさん
2005/04/16(土) 15:07:57多分違うソケット読んじゃってる
0596デフォルトの名無しさん
2005/04/16(土) 15:12:13Win2K で UDP で WSAECONNRESET は過去ログになにかあったような気がする。
MS の Knowledge base に記事があるような・・・
これとか
http://support.microsoft.com/kb/263823/JA/
これとか
http://www-pc.uni-regensburg.de/systemsw/W2KPRO/UPDATE/POSTSP1/Q263823.htm
あと、そっちの「10km離れたとこのグローバルIPの機械」は、ほんとにグローバルIP持ってるんですよね。
どちらもローカルIPでルータ(NAT)経由だと、通信開始時に何か一台ほんとにグローバルIPを持った
機械の助けがないとUDP通信は無理ですよ。
0597デフォルトの名無しさん
2005/04/16(土) 16:05:090598582
2005/04/16(土) 17:08:12>>596
>>597
分かりました!
しかも、完璧に!
問題の原因ではなく、私の知識が圧倒的に足りないという事が分かりました。
ソケット以前の問題の様です。
本買いに逝って来ます。
>>596 さんの言われている通り、
ローカルからローカルへの接続をしようとしてたみたいです。
誠に勝手ながら�@�A�Bの質問は、無かった事にさせてください。
おそらく答えていただいても、わけが分からないので。
付き合って頂いて、ありがとうございました。
0599winsock2です
2005/04/16(土) 17:20:35で、プロトコルをTCPにしてTCPヘッダを編集することはできないのでしょうか?
プロトコルをUDPやICMP、RAWにするとパケット自体は送信できているんですが、
TCPにするとパケットも遅れてないようです。
0600デフォルトの名無しさん
2005/04/16(土) 17:24:10遅延が無いなら問題ないでしょ
という冗談は置いといて
番号がおかしい
0602デフォルトの名無しさん
2005/04/16(土) 17:45:26それじゃなくて通し番号
0604デフォルトの名無しさん
2005/04/16(土) 18:32:59アクティブモードで、クライアントのデータコネクション用ソケットにサーバから接続することができるんですが、なんででしょうか?
ルータでブロックされないのかな...
0605デフォルトの名無しさん
2005/04/16(土) 18:53:27自動的にポートを空け、PASVでなくても通信出来る場合がある。
0606デフォルトの名無しさん
2005/04/16(土) 19:19:490607デフォルトの名無しさん
2005/04/16(土) 21:19:22あと、出来れば外部との接続に有効なポート(NATで正しく設定されているポート)かどうかまで解れば良いんですが・・・。
やはり、一度外部との接続をして試すしか方法はありませんか?
環境はWin2k以降でWinsock2ででの話です。
0608デフォルトの名無しさん
2005/04/16(土) 21:47:46> 特定のサーバーに頼らずに、そのシステム内で被らないポート番号を捜す方法って無いのでしょうか?
bind()してみる。
http://www.iana.org/assignments/port-numbers
> The Dynamic and/or Private Ports are those from 49152 through 65535
49152移行から試すのが吉。
NATについては、ルータの設定による。
0609デフォルトの名無しさん
2005/04/17(日) 09:22:210610デフォルトの名無しさん
2005/04/17(日) 11:32:110611デフォルトの名無しさん
2005/04/17(日) 12:01:44マッピングの勉強してこい
というか、今時初心者でもルーターのポート設定くらいしたことあるぞ。(汁
0612デフォルトの名無しさん
2005/04/17(日) 12:02:15ネットゲームでよく見られる"ping"って何の値なんでしょうか?
日本のサーバーは20〜70
欧米のサーバー等は200〜300位の様ですが。。。
winsockを使っている事は間違い無い様です。
0613デフォルトの名無しさん
2005/04/17(日) 12:27:220614612
2005/04/17(日) 12:40:180615デフォルトの名無しさん
2005/04/17(日) 13:00:19http://web.bilkent.edu.tr/Online/Jargon30/JARGON_P/PING.HTML
↑面倒だから、これ翻訳して読んで、分からないこと聴いて。
heart beat packetの事だと思うが、ゲームによるだろ。
数値には秒単位なの?
0616612
2005/04/17(日) 13:27:08考えてみたらそうですね。。。 < ゲームによる
応答時間だと思うので、QueryPerformanceCounterを使う事にしました。
ありがとうございました。
0617デフォルトの名無しさん
2005/04/17(日) 15:04:33Windows だと、確かどっかのバージョンだかどれかのSPだかで、
セキュリティ対策としてTCPプロトコルでのRAWソケットからの通信は
できないようにされていたような気がする。
0618デフォルトの名無しさん
2005/04/17(日) 15:38:430619デフォルトの名無しさん
2005/04/18(月) 18:20:08アプリからQoSを通さずに直接Winsockへパケットを通す事は出来ずに
必ずQoSのサービルにパケットは食われますか?
アプリの作り次第ではQoS通さずに直接Winsockへ流せそうな気もするのですが、やっぱり無理なんですかね?
0620デフォルトの名無しさん
2005/04/18(月) 22:58:04グローバルIPから国名を導き出したい。
どうやりゃ良いの?
とりあえず、sageときますね(w
0621デフォルトの名無しさん
2005/04/18(月) 23:14:21市ねばいいのに。
0623599
2005/04/18(月) 23:28:11それかも。当方XPのSP2です。管理者権限はあるんだけどなー
0624デフォルトの名無しさん
2005/04/19(火) 00:41:29ばーか、もうくるな
0625デフォルトの名無しさん
2005/04/19(火) 00:42:21適当なQoS設定しとけよ。
0626ero nttkyo255138.tkyo.nt.adsl.ppp.infoweb.ne.jp/
2005/04/19(火) 01:14:06ァ kw う う
っ ハ wwお ぇ ぇっ
ァ ww
け とるの ハ うは w
0628620
2005/04/19(火) 01:51:12やっと、見つけた。。。orz
0629デフォルトの名無しさん
2005/04/19(火) 01:52:54やれば出来るじゃないか。感動した!
0630デフォルトの名無しさん
2005/04/19(火) 02:21:51ワロタ
0631デフォルトの名無しさん
2005/04/19(火) 10:17:21いあ、自分の知りたいのはQoSの設定の段階の問題じゃなくて、その後なのですが…
QoSの設定した後、普通のアプリならパケットはRsvpsp.dllを通ってWinsockに流れると思いますが、
Rsvpsp.dllを通さずに直接Winsockにパケットを叩き込んで、
QoSの影響を受けないようなアプリは作る事は出来ないのかって事を知りたいのですよ。
0632デフォルトの名無しさん
2005/04/19(火) 12:06:55617です。TCPがダメってのは単なる私の記憶違いでした。
↓これはどうですか?
http://support.microsoft.com/kb/884942/JA/
0633デフォルトの名無しさん
2005/04/19(火) 14:43:44板違いの気がしたのでこちらで再度質問させていただきます。
WininetAPIでHTTPSで通信を行い,サーバが仮証明書を利用した場合などに,
警告ダイアログボックス表示の禁止にしたいのですが、
どの関数をつかえばいいのでしょうか?
0634デフォルトの名無しさん
2005/04/19(火) 14:48:04http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;182888
Win32APIスレが妥当だと思いますが、あそこは荒れやすいので
0635デフォルトの名無しさん
2005/04/19(火) 18:33:22ありがとうございます。
証明書問題は解決できました。
あともう一つお聞きしたいのですが、
httpsでPOST処理をやりたいのですが、
下記のHPの通りに作っても、
送信処理がうまく走りません。
ttp://support.microsoft.com/kb/q168151/
httpのポート指定だと、POSTできるし、
結果がきちんと返ってきます。
このページ以外の処理も追加しないとダメなのでしょうか?
よろしくお願いします。
0636デフォルトの名無しさん
2005/04/19(火) 18:45:25全くわかりませんが、他の方が回答しやすいように
・各APIでエラー等は返されていないか
・IE等では、そのURL (https://〜) に対するPOSTが正常に行えるのか
など書かれてみてはどうでしょうか。
漏れならまず最初はサーバ側を疑います。
0637デフォルトの名無しさん
2005/04/19(火) 23:49:46無理
0638デフォルトの名無しさん
2005/04/20(水) 09:50:31色々調べた結果、正規の証明書が発行されないページのみで、
12045のエラーが出続けていました。
証明書のキャンセル処理が走っているのが、認識されていない?ようです。
何が違うのやら・・・
サーバー側を調べてみて、
証明書関係のことももうちょっと調べてみます。
0639デフォルトの名無しさん
2005/04/20(水) 14:40:10クライアントのconnectが完了してさらにwriteも完了し
PSHに対してACKまで返す なんてことあるの?
0640639
2005/04/20(水) 14:41:33データのパケットもクライアントは普通に送出するか。
ということはそれに対してACK返すのも普通の出来事か。
すまん。
0641デフォルトの名無しさん
2005/04/20(水) 18:22:560642デフォルトの名無しさん
2005/04/20(水) 19:37:01マニュアルみればわかるでしょ。
どうみても同じに見えない。
0643デフォルトの名無しさん
2005/04/20(水) 19:53:40TCPのACKは、あくまでもプロトコルとして相手のマシンに
データが到着した事を示す為のもので、相手のプログラムが
データを受け取った事を示す為のものでは無いから、
相手のプログラムがrecv()をコールしていなくても
相手のOSがデータを受け取ったタイミングでACKが
帰って来てもおかしくはないと思うよ。
0644デフォルトの名無しさん
2005/04/20(水) 21:24:57transparent proxyが間に挟まってたりするとそういう挙動をするね。
0645デフォルトの名無しさん
2005/04/20(水) 23:58:46出鱈目言うな。
0646デフォルトの名無しさん
2005/04/21(木) 10:34:35コネクションが確立してて、相手側の受信バッファ(ウィンドウサイズ)
にまだ空きがあれば、アプリケーション側がrecv()呼ばなくても
TCPのACKって帰って来るよね。
0647デフォルトの名無しさん
2005/04/21(木) 20:20:100648デフォルトの名無しさん
2005/04/21(木) 23:40:530649デフォルトの名無しさん
2005/04/22(金) 00:15:11>>639はaccept()していなくてもといっているのがワカランか!?
>>644の言う通りだ。(言外に通常では起きないと言っている)
0650デフォルトの名無しさん
2005/04/22(金) 00:31:19(2ちゃんねる管理人ひろゆきの言葉)
ttp://umi.no-ip.com/simple/pdone.html?id=205
0651デフォルトの名無しさん
2005/04/22(金) 03:10:24ばーかばーか>>1くらい読め
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-3.html#ss3.3
0652デフォルトの名無しさん
2005/04/22(金) 11:14:41やっと味方が出て来てくれた。
THXです。
>> その他の人
まぁ、一度サンプルつくってLANトレースを取りながら
動かしてみることをお勧めします。
0653デフォルトの名無しさん
2005/04/22(金) 21:17:240654デフォルトの名無しさん
2005/04/22(金) 22:32:42すぐ済むハナシなのに
0655デフォルトの名無しさん
2005/04/23(土) 10:51:40TcpListenerで取得したclientに対して
NetworkStream ns = client.GetStream();
StreamReader sr = new StreamReader(ns,enc);
StreamWriter sw = new StreamWriter(ns,enc);
sr.Read();
となっているときtelnetでこのプログラムに接続し、
文字を入力すると入力した文字がエコーされてしまうのですが
Read()はエコーを返すようにできているのでしょうか?
telnetのエコーはOFFにしてあります。
0656デフォルトの名無しさん
2005/04/23(土) 10:58:350657デフォルトの名無しさん
2005/04/23(土) 11:57:550658デフォルトの名無しさん
2005/04/23(土) 17:34:30IPヘッダをごにょごにょしたいのですが、
WinSock2のrawモードを細かく日本語で解説した物ってありますか?
Webページでも本でも、何でも構いません。
>>1の Winsock Programmer's FAQ (日本語訳) でリンクされている
ライブラリ等は使いたくありません。
宜しくお願いします。
0659デフォルトの名無しさん
2005/04/24(日) 01:59:23>>2にあるWinsock2の本。
> >>1の Winsock Programmer's FAQ (日本語訳) でリンクされている
> ライブラリ等は使いたくありません。
トロイの木馬ですか? (w
0661デフォルトの名無しさん
2005/04/24(日) 16:42:250662デフォルトの名無しさん
2005/04/24(日) 19:09:55?に文字化けしてるよ。
0663デフォルトの名無しさん
2005/04/25(月) 20:10:56SSH2のDSAで通信するときののプロトコルが解説されているサイトない?
0664デフォルトの名無しさん
2005/04/25(月) 22:05:380665デフォルトの名無しさん
2005/04/26(火) 01:08:40http://www.free.lp.se/fish/rfc.txt
http://www.faqs.org/faqs/computer-security/ssh-faq/
それから「DSAで」言われても困る。
0666デフォルトの名無しさん
2005/04/26(火) 01:10:40http://www.chiark.greenend.org.uk/~sgtatham/putty/links.html
0667デフォルトの名無しさん
2005/04/26(火) 20:18:03サンクス
がんばってみる
0668デフォルトの名無しさん
2005/04/29(金) 20:11:50ところ10022の無効な引数となりました。
ところが、別なマシン(win2Kpro)やwinXPheだと
正常に処理されます。
winXPproのファイアーウオールの設定でしょうか?
考えられる原因は・・・。
0669658
2005/04/29(金) 21:41:00すみません、本屋でその本を見かけて立ち読みしたのですが、
生ソケットと言うタイトルで、ICMPを発射するサンプルしかありませんでした・・・
これは Winsock Programmer's FAQ (日本語訳) に載ってたのとと全く同じような
気がするのですが、もう少し詳しく解説してある書籍はないでしょうか?すみません
0670デフォルトの名無しさん
2005/04/29(金) 23:43:49何が欲しいんだ?
0671デフォルトの名無しさん
2005/05/01(日) 15:56:54今は、各自でやってもらってます。
バッチファイルによる
control.exe inetcpl.cpl, ,1
ではコントロールアプレット→インターネットオプションまで表示されました。
ここでセキュリティレベルを一律”高”にできないでしょうか?
バッチファイルをクリックすることでアプレットの表示でなく、設定を行いたいです。
0672デフォルトの名無しさん
2005/05/01(日) 15:58:100673デフォルトの名無しさん
2005/05/01(日) 16:20:10ありがとう。
Windows板にはどこに書いていいかわからなくって。
スレよごしてしまった。すまん。
control.exeの引数みてもないからなんらかで
直接レジストリに書き込まなきゃいけないのかなー。
0674デフォルトの名無しさん
2005/05/09(月) 20:38:53できたら教えてください
WinSockでプロクシ経由で外部に通信の場合
WEBでしたらProxyに通信はってGET /<http://対象となるサーバー>
で、通信できるのはいいのですが
UDPとかを通信するのはどうすれば・・・
MFCのCInternetSessionでないとダメ?
そもそもプロクシ自体 HTTPとかの規格しか通さない物でしょうか?
0675デフォルトの名無しさん
2005/05/09(月) 20:42:54よくてHTTPSということにしたTCPしか通さない。
UDPを通すようなプロクシは聞いたことがない。
0676デフォルトの名無しさん
2005/05/09(月) 21:02:56ありがとうございます
やはりそうですか プロクシの設定で
このポートはスルー とかってできるんでしょうか?
0677デフォルトの名無しさん
2005/05/09(月) 22:36:38Gatewayは中継するProtocolを知っている必要があります。
0678デフォルトの名無しさん
2005/05/10(火) 01:40:450679デフォルトの名無しさん
2005/05/10(火) 08:32:46すみません、区別ついてないです
ただ、Gatewayはファイアウォールと違って
内部の効率を上げるのが目的と認識しているので
キャッシュする必要の無いプロトコルはスルーするのかな?
と思っただけです
0680デフォルトの名無しさん
2005/05/10(火) 08:55:06>>675
> UDPを通すようなプロクシは聞いたことがない。
http://www.delegate.org
0681デフォルトの名無しさん
2005/05/10(火) 08:55:330682デフォルトの名無しさん
2005/05/10(火) 09:06:330683デフォルトの名無しさん
2005/05/10(火) 19:03:46Router も Gateway じゃないの?
IGP とか EGP とかいうくらいだから
0684デフォルトの名無しさん
2005/05/10(火) 19:30:12プロキシ⊂ゲートウエイ
って事だな。
0685デフォルトの名無しさん
2005/05/11(水) 00:24:21> gatewayはレイヤー7のプロトコル中継です。
Should not confuse!
RFC1392より
gateway
The term "router" is now used in place of the original definition
of "gateway". Currently, a gateway is a communications
device/program which passes data between networks having similar
functions but dissimilar implementations. This should not be
confused with a protocol converter. By this definition, a router
is a layer 3 (network layer) gateway, and a mail gateway is a
layer 7 (application layer) gateway. See also: mail gateway,
router, protocol converter.
0686デフォルトの名無しさん
2005/05/11(水) 01:21:39データを伝送する装置またはプログラムのことである。
0687デフォルトの名無しさん
2005/05/11(水) 06:33:16>>680
ちゃんとアプリケーションゲートウェイって言わないと
通じないよ。
0688デフォルトの名無しさん
2005/05/11(水) 10:04:210689デフォルトの名無しさん
2005/05/11(水) 15:05:28closesocketしてもいいですよね?
サーバー側がsend->closesocketとしてて
クライアント側がrecv->closesocketとしてるんですけど
たまにrecvがSOCKET_ERRORを返すみたいなんです。
0690689
2005/05/11(水) 15:14:47まずいのでしょうか?1バイトって小さすぎ?
sendしてSleep(1000)、その後closesocketにしてみようかなぁ
0691デフォルトの名無しさん
2005/05/11(水) 18:18:58>2
0692デフォルトの名無しさん
2005/05/11(水) 19:17:09よくわかっておらず、漠然とした質問になっちゃいますが、ヒント頂けると有難いです。
XPのSP2をあてたら動かなくなった、ソケット通信処理があります。
可能性として考えられるのは、どの辺りでしょうか・・・
Windowsファイアウォールは切ってみたりもしましたが関係なさそうです。
0693デフォルトの名無しさん
2005/05/11(水) 19:31:180694692
2005/05/11(水) 19:32:04また、同じプログラムが正常動作するXP SP2環境もあり・・・
# どうもウィルスバスターの最新版が入っているとダメなような・・・
# 関係無いと思いますが。バスターのファイアウォールも切ってます
0695ヽ(´ー`)ノ ◆.ogCuANUcE
2005/05/11(水) 19:53:04まず問題の切り分けをすること。
SP が原因なのか、ウィルスバスターが原因なのか。あるいは他か。
アドバイスできるのはそれだけ。
0696デフォルトの名無しさん
2005/05/11(水) 19:55:12shutdown(SD_SEND)して、recvが0を返すまで待て。
0697デフォルトの名無しさん
2005/05/11(水) 20:12:41すみません、バスターの件は余計でしたね。
SP2適用後に動かなくなったので(バスターはその前から入ってた)
SP2が原因というか、トリガーであるのは間違い無いです。
ひとまずは、>>693さんのいうところを試してみます。
# loadlibraryしてないので、静的リンクとみていいですよね・・・?
# はいすみません、VCも初心者です・・・・(つд⊂)
0698デフォルトの名無しさん
2005/05/11(水) 20:34:23なかったっけ?
0699デフォルトの名無しさん
2005/05/11(水) 22:34:320700デフォルトの名無しさん
2005/05/11(水) 22:36:11おれの会社ではバスターアンスコ運動が始まってるぞ
しかし対抗馬は、悪名高い某しまんてっくだ
0701デフォルトの名無しさん
2005/05/11(水) 22:43:58APIの戻り値を無視しているなら氏ね。
0702デフォルトの名無しさん
2005/05/11(水) 22:49:21失ったユーザーを多少は回復できる見込みもあるんだけど
今は無理だろうね。
・・・スレ違い失礼。
0703デフォルトの名無しさん
2005/05/12(木) 12:29:16ここら辺の情報には目を通した?
http://support.microsoft.com/default.aspx?scid=fh;[ln];windowsxpsp2dev
0705デフォルトの名無しさん
2005/05/13(金) 01:16:08て送る場合、どれくらいのサイズが良いと言う目安はありますでしょうか?
一応ADSL1M以上の環境限定で、500バイトぐらいに分割して送って
います。この500バイトという数字があまりにも小さすぎるor大きすぎ
るということはありますでしょうか?そんなに厳密なものを求めている
わけではないので、ある程度のずれは気にしないのですが…
0706デフォルトの名無しさん
2005/05/13(金) 01:22:360707デフォルトの名無しさん
2005/05/13(金) 01:47:52そのあたりの具体的な数字が見つからずに質問しました。
同じような環境でプログラムを組んで、何かの資料や経験上から
具体的な数字が分かる方がいないかなと…
テンプレのリンク先で別に8KBという数字は見つけたのですが…
0708デフォルトの名無しさん
2005/05/13(金) 02:12:410709デフォルトの名無しさん
2005/05/13(金) 02:19:24「小さく分割して送る」と考える時点で
socketを理解してないような。
0710デフォルトの名無しさん
2005/05/13(金) 02:25:14でもそんな心配もイラン品
0711デフォルトの名無しさん
2005/05/13(金) 02:42:43はなく、もともとファイル自体が細切れになっていて、それを500
バイト単位でまとめて送っている状況です。
Winnyなどが暗号化して細切れになったファイルを送っているのに
近い感じです。
そういう経験があって、具体的な数字が分かる方がいらっしゃると
良いのですが…そんなに簡単にいませんよね…
0712デフォルトの名無しさん
2005/05/13(金) 03:19:06500バイトのパケットが100個届くと考えている点が
ネットワークプログラミングの初歩を理解してないって事だよ。
0713デフォルトの名無しさん
2005/05/13(金) 03:35:51一体何が知りたいのかさっぱり判らんよ。フロー制御がしたいのか?
その500バイトってのは1秒に一回送ってるの?
だったら小さすぎだけど、1ms毎に送ったりしてるなら大きすぎに思える
自分と相手との明確な回線速度は判らないから、1M限定で考えるなら
1割引して120KB/sくらいでいいんじゃないか。
もっと適応性を持たせたいなら、送る量をだんだん増やしていって、
send時にブロックしはじめたら、そこを限界あたりにするとかさ。
0714デフォルトの名無しさん
2005/05/13(金) 07:01:42TCP使うとは書いてないしな
0715デフォルトの名無しさん
2005/05/13(金) 07:40:19・サイズを気にする理由が書いてない。よって目的不明。
・プロトコルが書いてない。よって技術的検討不能。
・環境が書いてない。よって技術的検討不能。
0716デフォルトの名無しさん
2005/05/13(金) 11:09:44答えだけ簡単に書くぞ。
・送る側は何も気にせず全速力で500バイトでも5000バイトでも
好きなバイト数ずつsendすればよろし。CPU能力がボトルネックに
なりそうなら、できるだけ大きい単位で送る。
移植性等を考えないなら、1回のTransmitPacketsで全て送る。
・受信する側は出来るだけ大きい単位で recv して、その後処理する。
頭4バイトにサイズがあるから、などといって4バイトだけrecvするとか
は しないように。
0717デフォルトの名無しさん
2005/05/13(金) 12:28:28無茶な質問に丁寧に答えていただき有難うございます。参考にな
りました。
0718デフォルトの名無しさん
2005/05/13(金) 14:12:01Winsockにて
Proxy越しに通信してますが
リクエストヘッダに
Proxy-Connection: Keep-Alive
指定してますが レスポンス後に クライアント-> Proxy間で
通信がきられます。 Proxy->オリジンサーバーでは
Keep-Aliveされてるんですが
この場合、毎回ソケットを作成して通信しないといけないのでしょう?
0719デフォルトの名無しさん
2005/05/13(金) 20:40:000720デフォルトの名無しさん
2005/05/14(土) 01:33:22やさしくしてやれ
あと、ときどき思い出させるんだ
0721デフォルトの名無しさん
2005/05/14(土) 02:32:290722デフォルトの名無しさん
2005/05/14(土) 19:09:25(昔そんなものがあったねと書いてるだけ)
0723デフォルトの名無しさん
2005/05/14(土) 20:53:49だからそういう事が言いたいんだろ?
KeepAliveの動作なんて実装依存。
>>718 が環境も書かないアホな以上どうしようもない。
書いたとしてもどうしようもないけどな。
0724デフォルトの名無しさん
2005/05/15(日) 20:36:11ウィンドウズでは無理なのかな・・・
0725デフォルトの名無しさん
2005/05/15(日) 21:43:390726724
2005/05/16(月) 00:11:140727デフォルトの名無しさん
2005/05/17(火) 22:39:54IEでHPとか見る時って上のレイヤーからどんな風にプロトコルが使われているのですか
0728デフォルトの名無しさん
2005/05/17(火) 23:12:19TCPで通信。とか、UDP。とか、TCP/UDP
ってのぐらいしかしらないんだけど、ソケット使うとき
設定とかしないよね・・・?
0729デフォルトの名無しさん
2005/05/17(火) 23:18:490730デフォルトの名無しさん
2005/05/17(火) 23:41:420731デフォルトの名無しさん
2005/05/17(火) 23:42:520732デフォルトの名無しさん
2005/05/17(火) 23:43:53HTTP の P でも UDP の P でも無いよ
0733デフォルトの名無しさん
2005/05/17(火) 23:46:080734デフォルトの名無しさん
2005/05/17(火) 23:49:050735デフォルトの名無しさん
2005/05/17(火) 23:51:220736デフォルトの名無しさん
2005/05/17(火) 23:53:490737デフォルトの名無しさん
2005/05/18(水) 18:02:25Cで、Windows2k/XPでIPを偽装しTCP/UDPパケットを送信したいのですが、
何か良いのはありませんでしょうか・・
0738デフォルトの名無しさん
2005/05/18(水) 18:27:34インターネットに対しては使えないと思うが、用途は何?
0739デフォルトの名無しさん
2005/05/18(水) 18:47:210740デフォルトの名無しさん
2005/05/19(木) 01:20:54Linuxでtcpdumpを使って以下の動作を確認しました。
lo(ローカルループバックデバイス)に対してパケットを送信するときは常に
・127.0.0.1宛てのパケットなら送信元も127.0.0.1
・127.10.11.12宛てのパケットなら送信元も127.10.11.12
というように、送信先アドレスと送信元アドレスが同じパケットが送信される。
これを、
・127.*.*.*宛てのパケットなら送信元は必ず127.0.0.1
というように、送信元のアドレスを固定したいのです。(固定されていればアドレスは何でも良い)
このような設定は可能でしょうか?
また、このような設定が不可能であるとすると、これはどのレベルで決まっている仕様なのでしょうか?
(RFC?loデバイスドライバの実装?)
ちなみに、loのサブネットマスクを255.255.255.255にした場合、127.*.*.*(127.0.0.1以外)宛てのパケットは
eth0を使って送信されるので、送信元アドレスはeth0に割り当てられたアドレスに固定されますが、
私が実現しなければならないのは、あくまでloデバイス(eth0以外のデバイス)を使ってパケットを送信することなので、
これは解決策にはなりません。
どなたかお知恵をお貸しください。
0741740
2005/05/19(木) 01:21:42=========== ifcfg-lo ===========
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
BOOTPROTO=none
================================
0742デフォルトの名無しさん
2005/05/19(木) 01:48:45man 7 ipしてINADDR_ANYも調べてね。
0743740
2005/05/19(木) 02:02:11申し訳ありません。言葉が足りませんでした。
127.*.*.*へパケットを送信するのは私の作るプログラムではなく、sshやftpやtelnet等任意のアプリケーションなんです。
そのパケットを受け取って加工して利用するプログラムを作っています。
0744デフォルトの名無しさん
2005/05/19(木) 02:37:48Linux板言って、iptableの使い方聞け。
0745デフォルトの名無しさん
2005/05/19(木) 02:56:08iptablesを使って作っています。
送信元=送信先だとIPアドレスだけでは送信方向を判別できないので、
IPアドレスだけでフィルタリング条件を書けないのが不便なので困っています。
ポート番号をフィルタリング条件に利用する場合のプログラムは完成しています。
あらゆるアプリケーションに対して固定の送信元アドレスを強制するのは不可能ってことですかね?
0746デフォルトの名無しさん
2005/05/19(木) 07:18:55iptablesにパケットが通らない状態でどうやって制御すんのさ?
0747デフォルトの名無しさん
2005/05/19(木) 07:20:230748デフォルトの名無しさん
2005/05/19(木) 08:16:45ネットワークに接続したときに何かメッセージが来るのでしょうか?
0749デフォルトの名無しさん
2005/05/19(木) 11:48:19HttpSendRequestにPOST処理と同じようにメッセージを渡せばいいのでしょうか?
それとも他の方法を使わないとダメでしょうか?
0750デフォルトの名無しさん
2005/05/19(木) 16:07:53データリンク(ethernet)を扱うにはどうすればいいんでしょうか
ソッケトでは無理らしいし・・・
0751デフォルトの名無しさん
2005/05/19(木) 16:10:13> あらゆるアプリケーションに対して固定の送信元アドレスを強制するのは不可能ってことですかね?
それだけなら ip route ... src 使えばできると思う。だけど、俺が試したら、
普通のサブネットに対しては動いたけど、127.*/8 では確かになんか動きが変だった。
俺のやり方が悪いだけかもしらんので、この辺見ていろいろ試してみてくれ。
http://linux-ip.net/html/routing-saddr-selection.html
http://linux-ip.net/gl/ip-cref/node155.html
あとは Linux の実装の問題かも。ちょうど最近 linux-net でも同じような
ことやりたいという人がいて、そこでも 127/8 を特別扱いしているのでは、
というような話があったと思う。
カーネルソース追っかけるならこの辺から。
net/ipv4/tcp_ipv4.c:ip_queue_xmit()
lo ではなく、カーネル内部のルーティングに関する部分。
ざっと見たけど、どの条件にマッチしているのか俺の知識では追いかけきれなかった。
0752デフォルトの名無しさん
2005/05/19(木) 16:19:3650年も前にあんな理論を導くとは。
0753デフォルトの名無しさん
2005/05/20(金) 18:24:081000バイト以上溜まった受信データをFD_READイベントで引き取る際、
500バイト読み出し、としてrecv()後、次のFD_READがポストされるまでに
500ms近くかかっているようなのですが、この時間って、
変更できないものでしょうか??
0754デフォルトの名無しさん
2005/05/20(金) 21:42:33IrLMP、TinyTPも実装しようとしてますが、まずは手始めにIrLAPを
考えています。
Irのトランシーバーモジュールはアジレント製かシャープ製かを採用
するつもりですが確定ではありません。
当方、プロトコルドライバー、あるいはプロトコルスタックの実装経験
がありません。
まずは、リンク層の動作を学びたいと考えてます。
そこで、参考になりそうな下記のサイトを見つけました。
Ethernetの動作過程
www.ese.yamanashi.ac.jp/~itoyo\lecture\network\network07\ethernet.htm
ここでは、『回線監視』、『送信』、『受信』の大まかな流れが解説されて
ます。
もう少し詳しい解説が欲しいのですが、適当な書籍、WebSiteを教えてください。
よろしくお願いします。
www.irda.orgよりIrLAPの仕様書(英文)は入手済みですが、なにぶん
英語が苦手でスラスラ頭に入ってこない状態です。
0755デフォルトの名無しさん
2005/05/20(金) 23:18:34途中で切断された場合に備えてリトライ付けるべきでしょうか
0756デフォルトの名無しさん
2005/05/20(金) 23:54:46好きにしろ
0757デフォルトの名無しさん
2005/05/21(土) 01:32:200758デフォルトの名無しさん
2005/05/21(土) 08:21:410759デフォルトの名無しさん
2005/05/21(土) 08:47:05デーモンみたいに裏で稼働してる奴なら自動で数回リトライしてみる
事もあるし、リトライ可能な作りにはしたけど疎通試験段階で「やっぱ
無くていい、つーかあると処理キュー埋まってまずいからリトライ回数
0に設定」なんて事もあるし、普通のGUIアプリならエラーダイアログ
出してリトライするかユーザーに選択させる事もあるし。
まぁ後々「やっぱ必要だわ」となる可能性があるなら、リトライ可能な
作りにしておくのはいいと思うけど。
0760デフォルトの名無しさん
2005/05/21(土) 13:47:160761デフォルトの名無しさん
2005/05/21(土) 16:02:420762デフォルトの名無しさん
2005/05/21(土) 20:18:10ttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.15
で言われているようにマシンが違うからセルを指定するのにアドレスが使えない。
連結リストの各セルに順序を示す整数を持たせることも考えたけど
挿入の度にそれ以降のセルの整数を更新させないといけないし…
何か良い方法ないですか?
0763デフォルトの名無しさん
2005/05/21(土) 20:23:000764デフォルトの名無しさん
2005/05/21(土) 20:27:520765762
2005/05/21(土) 20:59:58リストに対する挿入・削除のときにポインタでアドレスを直接指定することが出来ないので
何か間接的な方法でセルを指定できないといけなんですよね。
今考えているのは
リストのセルを追加するタイミングでセルごとに一意な共通の整数値を割り振って、
その整数値に対して挿入・削除を実行すれば連結リストの構造を保ったまま通信が出来る、というものです。
要するに論理アドレスみたいなものを導入するという…
0766デフォルトの名無しさん
2005/05/21(土) 21:02:58これがベストなのかな?
0767デフォルトの名無しさん
2005/05/21(土) 21:07:03>リストに対するオペレーションのログを取る
リストに対して例えば挿入を指示するとき、そのセルへのポインタを引数として渡すよね。
異なるマシン間でポインタは一致しないから、それだとダメっぽいけど
0768デフォルトの名無しさん
2005/05/21(土) 21:07:19あーそういう問題があるんだ
昔ネットワーク上でソート済みのListを受け渡してたら
なぜか、受け側でソートが元に戻ってたんだよな
そういう理由があったのか
0769デフォルトの名無しさん
2005/05/21(土) 21:14:10指定されるたびに一々走査したら効率悪くない?
0770デフォルトの名無しさん
2005/05/21(土) 21:20:02リストなんだから、直アドレスが分からなくてもオペレーションの書き出しは
可能でしょ
0771770
2005/05/21(土) 21:22:280772デフォルトの名無しさん
2005/05/21(土) 21:28:280774デフォルトの名無しさん
2005/05/22(日) 07:08:130775デフォルトの名無しさん
2005/05/22(日) 07:31:23ipconfigでv6のアドレスが出てくるようになったし・・・
0776デフォルトの名無しさん
2005/05/22(日) 11:47:57どこかにping投げる
0777デフォルトの名無しさん
2005/05/22(日) 16:09:35ネットワークプログラミングの課題をやってもらおうと思って書いたのですが、
なかなか難しいらしいので、ここにも書いてみます。
http://pc8.2ch.net/test/read.cgi/tech/1115794784/252
http://pc8.2ch.net/test/read.cgi/tech/1115794784/477
もし、やってくれる神がいたらと思ってます、お願いします!
0778デフォルトの名無しさん
2005/05/22(日) 16:18:54聞き方が悪かったんじゃないの?
0779デフォルトの名無しさん
2005/05/22(日) 16:23:310780デフォルトの名無しさん
2005/05/22(日) 19:25:37漏れは1とか255とか17とか登録されたプロトコルだけしかパケットが送信できない。
0782デフォルトの名無しさん
2005/05/22(日) 23:20:24おい信じるなよ。宿題スレ以外で宿題やってくれる香具師なんぞいないぞ。
0783デフォルトの名無しさん
2005/05/23(月) 07:52:050784デフォルトの名無しさん
2005/05/23(月) 08:06:370785デフォルトの名無しさん
2005/05/23(月) 16:43:240786デフォルトの名無しさん
2005/05/23(月) 17:13:150787デフォルトの名無しさん
2005/05/24(火) 00:06:40スレッド間通信をすることができるのでしょうか?
ぐぐっても、スレッド間通信にソケット通信は出てこないようなので。
0788デフォルトの名無しさん
2005/05/24(火) 00:07:52やってみたらいい
0789デフォルトの名無しさん
2005/05/24(火) 00:21:25こんな感じの 例のための予約IP ってあるかな
0790デフォルトの名無しさん
2005/05/24(火) 00:45:10http://www.example.com/
実際に行って読んでみ。
0791デフォルトの名無しさん
2005/05/24(火) 00:48:12これ読むと、192.0.2.0/24 を使えってことらしいよ
private なら何でも良さそうだけど
http://www5d.biglobe.ne.jp/~stssk/rfc3330j.html
0792デフォルトの名無しさん
2005/05/24(火) 01:12:59できないわけないだろ?
0793777
2005/05/24(火) 23:00:43火曜日ですよ、まだですか?
[1] 授業単元:演習
[2] 問題文(含コード&リンク):
サーバー→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/393.txt
クライアント→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/394.txt
ゲームサンプルプログラム→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/395.txt
問題→http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/396.txt
上の「問題」の「6. キーボード版 Network対戦用ゲーム 作成」をやってほしいのですが…。
[3] 環境
[3.1] OS:Red Hat Linux
[3.2] コンパイラ(バージョン):gcc
[3.3] 言語:C
[4] 期限:2005/5/25 12:00まで
[5] その他の制限:
http://uppp.ath.cx/src/uppp1483.zip
0794デフォルトの名無しさん
2005/05/24(火) 23:37:55騙されてるのに気が付いてない馬鹿(´ー`)
0795デフォルトの名無しさん
2005/05/25(水) 01:31:200797779
2005/05/25(水) 01:42:44あと 14時間くらいだからマターリしてな。今ごりごりコーディング中だから。
0798デフォルトの名無しさん
2005/05/25(水) 01:50:27おまい、信用されてないらしいよ。
http://pc8.2ch.net/test/read.cgi/tech/1115794784/967
0799デフォルトの名無しさん
2005/05/25(水) 02:00:100800デフォルトの名無しさん
2005/05/25(水) 07:23:300801デフォルトの名無しさん
2005/05/25(水) 11:13:35何で武蔵工業大学(MITw)がアメリカにあるんだよ!!
0802デフォルトの名無しさん
2005/05/25(水) 20:30:42IPとかARPとかに仕分けるところではまってます。
参考にしている本では受信してきたパケットの先頭をstruct ether_headerなる構造体に
キャストして、メンバのether_typeで判定しているのですが、VCのinclude以下にあるファイルを
すべてgrepしても該当する構造体が存在せず、また、winpcapにも該当する構造体が存在せず
コンパイルできません。
参考書は「基礎から分かるTCP/IPアナライザ作成とパケット解析 第2版:小高知弘:オーム社」で、
中に書いてあるコードはLinux/FreeBSD対応とのことです。
よって、VCではそのままでは動かないのは分かっているのですが、ether_headerなる構造体と
同等のものが提供されていないか、されているならなんと言う名前なのか教えていただけないでしょうか
0803デフォルトの名無しさん
2005/05/25(水) 21:17:06Linuxのほうのソースから引っ張ってくればいいと思うが。
0804777
2005/05/25(水) 21:42:39http://uppp.dip.jp/src/uppp1483.zip
ここに全部あります。
>>796-797
頑張ってください!
0805デフォルトの名無しさん
2005/05/25(水) 21:55:34ちったー探そうぜ。
http://www.google.com/search?num=50&lr=lang_ja&q=Ethernet+%E3%83%98%E3%83%83%E3%83%80
http://www.itbook.info/study/p2.html
あたりを見れば自分でも定義できるでそ。
>>803の方法ならnet/ethernet.hあたりだな。
次は「struct ipなる構造体と(ry」なんて書き込みするんじゃないぞ。
0806デフォルトの名無しさん
2005/05/25(水) 22:03:080808デフォルトの名無しさん
2005/05/25(水) 22:12:210809デフォルトの名無しさん
2005/05/26(木) 10:41:220810デフォルトの名無しさん
2005/05/26(木) 12:02:38pop3で接続してUIDLリターン
なんてったってIDOL
0811デフォルトの名無しさん
2005/05/27(金) 11:21:10やたらと遅延したりパケットを失わせることができる
ブリッジを作成したら、売れますか?
0812デフォルトの名無しさん
2005/05/27(金) 11:42:070813デフォルトの名無しさん
2005/05/27(金) 12:03:460814デフォルトの名無しさん
2005/05/27(金) 13:22:24マジですか
作るの面倒なのでそれはありがたい
0815デフォルトの名無しさん
2005/05/27(金) 15:33:080816デフォルトの名無しさん
2005/05/27(金) 17:33:37で検索すると、わらわら出て来るよ。
0817デフォルトの名無しさん
2005/05/27(金) 17:50:39で検索すると、わらわら出て来るよ。
0818デフォルトの名無しさん
2005/05/28(土) 01:16:39不正なクライアントということが判った後に
通信をその時点で打ち切りたいんですがshutdown/closeで良いですか?
0819デフォルトの名無しさん
2005/05/28(土) 02:04:030820デフォルトの名無しさん
2005/05/28(土) 02:07:180821デフォルトの名無しさん
2005/05/28(土) 02:15:01OK
0822デフォルトの名無しさん
2005/05/28(土) 02:30:070823デフォルトの名無しさん
2005/05/28(土) 09:30:540824デフォルトの名無しさん
2005/05/28(土) 11:31:21処理が5倍ぐらい遅いのですがなぜなのでしょうか?
0825デフォルトの名無しさん
2005/05/28(土) 11:35:36どうやって、測ったん?
まずは、そこから検証してみようじゃないか?
0826デフォルトの名無しさん
2005/05/28(土) 11:53:40Nagleアルゴリズム; TCP_NODELAY
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/tcp.7.html
>>825
お前みたいなの、うざいねん。
0827デフォルトの名無しさん
2005/05/28(土) 13:17:43・1500B以下とは、(826をみると、TCPのようだが)TCPのペイロードサイズなのか、
IPのペイロードサイズなのか、L2のペイロードサイズなのか、L2のフレームサイズなのか?
・L2は何なのか?Ethernet?GRE、IP-in-IP、IPsecなどのL3トンネル?L2TPv3、SoftEtherなどのL2トンネル?
・途中の構成はどうなのか?クロス直結?リピータハブ?スイッチ?ソフトウェアルータ?ハードウェアルータ(GSRとかMとか)?
・送信完了までの処理時間なのか、受信完了までの処理時間なのか?
・どうやって測ったのか?送信側でtcpdump?受信側でtcpdump?途中のスイッチでポートミラーか、sniffer proみたいなスルー機能つきの測定機でキャプチャ?
・Linuxのカーネルバージョンは何なのか。libcのバージョンは何なのか。
・NICは何なのか。(いろいろオフローディングできるカードなのか、蟹みたいにPHY層しか持たないカードなのか)
俺の予想→LinuxにTCP_NODELAYが実装されていない。
0828デフォルトの名無しさん
2005/05/28(土) 13:34:16余計な機器を間にはさんだりなどはしていないです。
簡単なHTTPのデータを投げてそれを相手側で取得するようなプログラムを作成
しています。Windows同士だと400Bのデータが最大55msec平均38msecで送受信されます。
Windows/Linuxだと最大で170msecで送信がなされ平均150msecで送受信されます
0829デフォルトの名無しさん
2005/05/28(土) 15:03:57こうしてデータが出てくると「やっぱり乞食OS・・・」と思ってしまう
0830デフォルトの名無しさん
2005/05/28(土) 23:10:32Linuxが貧乏OSだってそれで商売してる人には関係ないよ。
アホクライアントがLinux使いたいって言えば、それだけで
Windowsよりも高い開発費と保守費がゲットできるんだ。
だからおれはLinuxは大好きだぜうぇっへっへ
0831デフォルトの名無しさん
2005/05/29(日) 00:45:35>俺の予想→LinuxにTCP_NODELAYが実装されていない。
なんでこんな予想が出てくるか理解に苦しむ。
>>828
で、TCP_NODELAYは試したの?
0832デフォルトの名無しさん
2005/05/29(日) 13:12:06lEventで指定したものだけが非同期になるんですか?
それとも、lEventというのは飛んでくるメッセージを指定するだけのものですか?
あと、非同期でのsend()の方法がよくわかりません。
FD_WRITEってどういうときに飛んでくるのか、MSDNの説明だといまいちわからないんですが。
送信可能なときというのがよくわからない。
send()が終わったときに飛んでくるのではないんですか?
非同期で、
int x ;
char *buf = (char *) malloc(100) ;
x = send(s, buf, 100, 0) ;//帰ってくる値が100より小さかった場合、差分をもう一度sendしないといけないの?
//malloc()したメモリはここですぐにfree()していいの?
0833デフォルトの名無しさん
2005/05/29(日) 16:14:31>lEventで指定したものだけが非同期になるんですか?
NO
setsockoptでSO_RCVTIMEOやSO_RCVTIMEOを0にすると非同期になる。
>それとも、lEventというのは飛んでくるメッセージを指定するだけのものですか?
YES
>送信可能なときというのがよくわからない。
文字通り送信可能なとき。バッファに空きが無くて、sendされてもデータを受け取れないときや、
送信側のpeerが切断されているときは発生しない。
>//malloc()したメモリはここですぐにfree()していいの?
かまわない。
0834832
2005/05/30(月) 00:27:35ありがとうございます。
もうひとつ、
send()って、一度に送れるデータ量って決まっているんですか?
それとも、何十MBだろうと一気に送っていいものなの?
0835デフォルトの名無しさん
2005/05/30(月) 01:16:27よい。
0836デフォルトの名無しさん
2005/05/30(月) 01:39:160837デフォルトの名無しさん
2005/05/30(月) 02:38:33指定したサイズ以下しか送られない場合もあるぞ。
0838デフォルトの名無しさん
2005/05/30(月) 06:14:49質問します。
現在の私のhttpアクセス環境は以下の通り
OSLinux(2.0よりは上)
ウインドウマネージャ(でしたっけ、とにかくX環境)kde
一応自分なりにipchain だとかの設定は強固にした(つもり)です。
どうやらアプレット系のウイルスかワームをもらったようです。ですが
それを特定できません。したがって、そいつが悪さを起こすたびに
ADSL接続の電源を切り、リブートという始末です。
システムモニタプログラムとかでも監視していますが、私の技量では
問題を特定できません
~/home/MYFolder/ 以下の .kde の中を覗いたり /tmp/ 以下を
覗いたり、"netstat -alp(または-anp) | less"
コマンドを打ったりしますが、私の技量では問題を特定できません
だいたいX環境というものは、manにたいおうしていないのか、
man kde とかやっても、kdeinit をなのる各種のプロセス?がなにを
どのようにしているのか調べられず、困ってしまいます
0839デフォルトの名無しさん
2005/05/30(月) 06:20:03画面の下のメニューバー?がちらちら動きだし、なおかつ不特定多数の
ウインドウやプロセスが起動しようとして画面上で暴れる、というものです。
マウスフォーカスのコントロールを失っているため、システムモニタで
調べたくても調べられず、キーボードフォーカスも失っているため、
わたしのしっている数少ないコマンドも使えません
私の環境に付いて、ほんらいならもっと詳しく述べるべきでしょう。
でも私の今の状況では正直、UNIX系OS を通じたhttpアクセス全部が
信頼できず、したがって linux(ver2.0以上) & kde としか
申し上げられないという事をお詫びしておきます。
0840デフォルトの名無しさん
2005/05/30(月) 06:27:24man kde とかやっても、kdeinitをなのる各種のプロセス?がなにを
どのようにしているのか調べられず、困ってしまいます
説明がたりませんでした。
それは、そうやっても、マニュアルとはつながっていないためです
雑誌付属のCD-ROM(当時)のディストリビューションだからでしょうか、
商用ディストでないのに、(kdeの)ソースコードすら付いていないのです
0841デフォルトの名無しさん
2005/05/30(月) 09:10:05> 質問します。
激しく板違い
犬板池
0842デフォルトの名無しさん
2005/05/30(月) 09:11:46- httpアクセス全部が信頼できない理由は何? なんでアプレット系ウイルスで
http が出てくるの?
- httpアクセス全部が信頼できない場合は OS 名を書かなくてよい、という理論が
わけわからん。
- (kdeの)ソースコードが付いてなくても何も問題はない。つーかおまいソース
あったって何もできないでしょ。
- スレ違い。
0843デフォルトの名無しさん
2005/05/30(月) 11:32:040844デフォルトの名無しさん
2005/05/30(月) 11:42:57最初のリクエストヘッダの前に、生ソケットのICMPで
相手にキューの準備を要求するんだけど、そのときに、
もしも前のhttpパケットの最後のバイト値が、0x450xff0xffだとすると、
それが、次のパケット要求になるので、
もしもキュー要求の最初のバイト値が同じだと、
直立するレッサーパンダよりもパグのが見つけにくいよ。
0845デフォルトの名無しさん
2005/05/30(月) 11:45:07http://www.dogfan.jp/zukan/toy/pug/5.jpg
0846デフォルトの名無しさん
2005/05/30(月) 12:59:23> 相手にキューの準備を要求するんだけど
キティガイ?
0847デフォルトの名無しさん
2005/05/30(月) 19:42:47wheel 付マウスの設定の X に
あとから 3 ボタンマウスを繋ぎ替えたときに
同じような症状になったことがある。
とりあえずマウス換えてみそ。
いずれにせよすれ違いだが。
0848デフォルトの名無しさん
2005/05/30(月) 20:36:46>>847
3ボタンのwheel付きマウスは使っていますがつなぎ替えた事は無いのですが。
/home/katyo/.kde/share/config/
の下にリソースファイルなどを書き込むのは、Kdeプログラムの何と言う
関数がかかわっているのでしょうか?
せめて .c や .h, .cpp 名が分かれば、KDEホームページのCVSで
(バージョンは違うのですが)ソースを覗いてみたいと思います
そこのフォルダ下に不審な(?)ファイルがあるのですが、確信が無いため取り除けません
"ブラウザ名称: 英数値列40個くらい" という名称です
末尾に"rc"もつかず、そんなファイル名なので不審に思いました
0849デフォルトの名無しさん
2005/05/30(月) 20:42:380850デフォルトの名無しさん
2005/05/30(月) 21:05:29842ですが、マウス交換を検討してみようと思います。
ところで
ここで netstat コマンドの出力で生成される UNIX Domain Socket の出力項目に関する
質問をするのは、これまたすれ違いですか?そうでないなら質問したいのですが
0851デフォルトの名無しさん
2005/05/30(月) 21:09:52それ、ネットワークプログラミングに関係あるの?
よく考えてから物言えよ。
0852デフォルトの名無しさん
2005/05/30(月) 21:29:58>>1 に "主にソケットに関しての質疑応答スレです"
となっていたので、(Unix Domain)Socket の質問をしようと思ったのですが
どうやら、立ち去った方がよさそうですね。
0853デフォルトの名無しさん
2005/05/30(月) 21:32:130854デフォルトの名無しさん
2005/05/30(月) 21:35:45犬板逝け
0855デフォルトの名無しさん
2005/05/30(月) 22:17:01sendの戻りなんかチェックしてないわ・・
0856デフォルトの名無しさん
2005/05/30(月) 22:28:05おいおい(;´Д`)
0857デフォルトの名無しさん
2005/05/30(月) 22:36:36こういうのだし
return send(sd, buf, bufsize, 0) != SOCKET_ERROR;
もしもサイズ分送れなかったら、
繰り返しsendで残りを再送していいのかな。
char *p = buf;
int size = bufsize;
for (;;) {
int r = send(sd, p, size, 0);
if (r == SOCKET_ERROR) {
// エラー処理
break;
} else
if (r == size) { // 全部送った
break;
} else { // まだ残ってる
p += r;
bufsize -= r;
}
}
こんなんで
上の他に何か必要なものありますかね
0858デフォルトの名無しさん
2005/05/30(月) 22:39:30の間違い
つーかやべーな
既に稼動してるのとかあるしw
0859デフォルトの名無しさん
2005/05/30(月) 22:46:340860デフォルトの名無しさん
2005/05/30(月) 22:55:50あれ?sendって実行時に送信するわけじゃないよな
実装にもよるけど、たいていはキューにぶち込まれて
あとはOSが処理しないか?
TCPなら再送もあるし待ってらんないんじゃ?
あれ?でもそれはノンブロッキング時のみの話か?
ちょっと妹に聞いてくる
0861デフォルトの名無しさん
2005/05/30(月) 23:01:15> 実装にもよるけど、たいていはキューにぶち込まれて
これは仕様で保証してないわけでしょ?
0862デフォルトの名無しさん
2005/05/30(月) 23:19:26なる。キューが完全に一杯ならブロックするけど。
あるいは、キュー自体より大きなサイズを送ろうとしても
同様に partial write になる。
UNP読んでれば常識。WindowsプログラマーでもUNPだけは
読んどけ。
0863デフォルトの名無しさん
2005/05/30(月) 23:21:31うん(ぴー)こってこと?
0864デフォルトの名無しさん
2005/05/30(月) 23:22:320865デフォルトの名無しさん
2005/05/31(火) 00:29:140866デフォルトの名無しさん
2005/05/31(火) 00:40:440867デフォルトの名無しさん
2005/05/31(火) 01:08:47fwriteのは第三引数で与える項目数だけ*出力する*んだよねー
趣が全然違う
0868デフォルトの名無しさん
2005/05/31(火) 03:45:08妹にもそういって馬鹿にされたよ・・・
0869デフォルトの名無しさん
2005/05/31(火) 05:49:48萌え(*´∀`)つ
0870デフォルトの名無しさん
2005/05/31(火) 13:39:54「出力することを試みる」けど、成功するとは限らない。
RETURN VALUES
The functions fread() and fwrite() advance the file position
indicator for the stream by the number of bytes read or
written. They return the number of objects read or written. If an
error occurs, or the end-of- file is reached, the return value is a
short object count (or zero).
0871デフォルトの名無しさん
2005/05/31(火) 14:11:400872探してます。
2005/05/31(火) 17:09:44EcoPassIE�Uのネットワーク版、ありましたらよろしくです。
0873デフォルトの名無しさん
2005/05/31(火) 17:24:150874探してます。
2005/05/31(火) 17:30:44ripd今調べてみましたが
一般には敷居が高いようなZebraサーバーとか・・・
0875デフォルトの名無しさん
2005/05/31(火) 17:43:010876デフォルトの名無しさん
2005/05/31(火) 20:12:02sendは成功すると必ず1バイト以上は送ることを保障する
よって>>857はエラー処理を除き完璧なソースと言える
0877デフォルトの名無しさん
2005/05/31(火) 22:57:270878デフォルトの名無しさん
2005/06/01(水) 00:09:41これから時間をかけてそのツケを払うんだろう、スマートじゃ無いなあ
0879デフォルトの名無しさん
2005/06/01(水) 00:23:27ネットに転がってる他人のソースを見てモノマネで作るからいけない。
関数リファレンス見て自分で考えて創る香具師がめっきり減った。
0880デフォルトの名無しさん
2005/06/01(水) 00:40:03ダサいですね。>UNIX
0881デフォルトの名無しさん
2005/06/01(水) 00:44:03つまらん。2点。
0882デフォルトの名無しさん
2005/06/01(水) 13:35:52さらに上のレイヤで確認しないといけないかも。
0883デフォルトの名無しさん
2005/06/01(水) 16:53:32結局はエラー処理のエラー処理になって、永久に確実な方法にはならない。
無駄にレイヤーが増えるだけですよ
0884デフォルトの名無しさん
2005/06/01(水) 19:14:340885デフォルトの名無しさん
2005/06/01(水) 19:36:53届いてるかどうかは別問題だろ。
0886デフォルトの名無しさん
2005/06/01(水) 21:31:52UDPだと送ったというだけで届いているかどうかは知ったこっちゃないが
0887デフォルトの名無しさん
2005/06/01(水) 22:04:16届くまで何回か再送を試みるが、sendはブロックしないよ。
再送を試みた結果、駄目だったら接続が閉じられる。
閉じられるまでに、何処まで正常に送信されていたかは、分からないな。
0888デフォルトの名無しさん
2005/06/01(水) 22:57:54> sendはブロックしないよ。
ブロックするだろ。
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.11
送信側は、ソケットの送信バッファが一杯になった時にブロックします。
0889デフォルトの名無しさん
2005/06/01(水) 23:02:400890デフォルトの名無しさん
2005/06/01(水) 23:15:56バッファがいっぱいになるまでは送信に成功したとしても
届いているとは限らないってことね。
0891デフォルトの名無しさん
2005/06/02(木) 01:56:03「チッ!UDP使ったけどパケット落ちまくりやがる。やっぱTCPだな」
と言ったことのある香具師のうちの何人かは>>855みたいなヤツなんだろうな。
0892デフォルトの名無しさん
2005/06/02(木) 03:08:170893デフォルトの名無しさん
2005/06/02(木) 03:22:200894デフォルトの名無しさん
2005/06/02(木) 07:06:43判ってんのかなあ。
0895デフォルトの名無しさん
2005/06/02(木) 11:45:22ギャハッハハwwwwwwwwwwwww
0896デフォルトの名無しさん
2005/06/03(金) 07:59:510897デフォルトの名無しさん
2005/06/03(金) 09:25:240898デフォルトの名無しさん
2005/06/03(金) 10:06:250899デフォルトの名無しさん
2005/06/03(金) 13:02:41返り値調べればパケットが落ちたどうか分かると思っているんでしょうか?
0900デフォルトの名無しさん
2005/06/03(金) 14:41:00詳しく
0901デフォルトの名無しさん
2005/06/03(金) 23:14:15俺はわかんないことがあったら妹に聞いてる
0902デフォルトの名無しさん
2005/06/03(金) 23:49:160903デフォルトの名無しさん
2005/06/04(土) 01:44:010904デフォルトの名無しさん
2005/06/04(土) 03:41:090905デフォルトの名無しさん
2005/06/04(土) 08:48:270906デフォルトの名無しさん
2005/06/04(土) 10:10:220907デフォルトの名無しさん
2005/06/05(日) 00:44:45変態!
0908デフォルトの名無しさん
2005/06/05(日) 20:57:07bind()で、SO_REUSEADDR エラーになる。
bind以前に、同じアドレスでbindしたソケットは、closesocket してる。
ただしその前に、そのソケットでWSAAcceptやって、ソケットを1つ生成してる。
生成したScoketでは、bindしてない。
どこが悪いんでしょうか。
0909デフォルトの名無しさん
2005/06/05(日) 20:59:34SO_REUSEADDR エラーじゃなくて、WSAEADDRINUSE エラー
0910デフォルトの名無しさん
2005/06/05(日) 21:05:360911デフォルトの名無しさん
2005/06/05(日) 21:17:270912デフォルトの名無しさん
2005/06/05(日) 21:30:15http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-4.html#ss4.1
0913デフォルトの名無しさん
2005/06/05(日) 21:44:022.7 TIME_WAIT 状態について考えてみました
TCPは、closesocketで閉じられたときにも、ソケットが有効に働いてることは、
これはTCPは、あなたのお友達であり、助けであるのです。
喪失されたと思われたパケットは、これは実際にはデータが失われていないで、
ルータを徘徊していたゾンビだったのかもしれません。思い出してください。それは、
きっと大切でしょう。ソケットを賢く使うのにおいて。
しかしだね。
WSAAcceptでソケットを生成しないで、bindしたソケットを閉じて、
すぐに、それと同じアドレスとポートで、新規ソケットでbindしたときは、エラーにならないよ。
0914デフォルトの名無しさん
2005/06/05(日) 22:08:17WSAAcceptしたソケットをまた使い続けることができる。
ということは、WSAAccept でソケットが生成されたときは、
同一プロトコル同一ポートのソケットが、2つになる?
0915デフォルトの名無しさん
2005/06/05(日) 23:23:41同じものじゃないことに注意
0916デフォルトの名無しさん
2005/06/05(日) 23:54:41ソケットは、IPアドレスと、プロトコルと、ポートによって識別される。
だから同じじゃんよ
0917デフォルトの名無しさん
2005/06/06(月) 00:19:38そう。だから死ねる。
0918デフォルトの名無しさん
2005/06/06(月) 06:38:58ソケットは、Protocol, SrcIP, SrcPort, DstIP, DstPortによって識別される、と。
0919デフォルトの名無しさん
2005/06/06(月) 12:49:27省略語ばっかりで正確さに欠けるので、もう少し正確にお願いいたします。
0920デフォルトの名無しさん
2005/06/06(月) 17:29:28<発信元IPアドレス、発信元ポート番号、発信元受信元IPアドレス、発信元ポート番号>
の四つ組でユニークに識別されるけど、>>916から話がずれてきている。
0921デフォルトの名無しさん
2005/06/06(月) 18:04:25ヘーそなんだ。
そんで、ソケットに割り当てられている、
Protocol, SrcIP, SrcPort, DstIP, DstPort
は、どうやって取得するの?
0922デフォルトの名無しさん
2005/06/06(月) 18:08:47socketはsocket descriptorによって識別される、と:b
0923デフォルトの名無しさん
2005/06/06(月) 18:10:10getsockname()
getpeername()
をつかえ
0924デフォルトの名無しさん
2005/06/06(月) 18:11:37getsocknameすれば、SrcIP, SrcPortがとれる。
Protocolは、両方でとれる。
0925デフォルトの名無しさん
2005/06/06(月) 18:16:40ソフトバンクの、WinSock2.0プログラミングには、載ってないよ。
どこに載ってるの?(日本語で)
0926デフォルトの名無しさん
2005/06/06(月) 18:19:02ただし、リファレンスに。
索引は載ってない。つまり、本文の中で扱ってないのか
0927デフォルトの名無しさん
2005/06/06(月) 18:37:22受信側から受け取り確認されてないものだけ
タイムアウトを決めて送信するプログラムを作ってるのですが。
送信メッセージとエラー率を多くすると、Interrupted System Call
って言うエラーが出てきます。これを回避できる考えがある方、
ご意見お待ちしております。
0928デフォルトの名無しさん
2005/06/06(月) 18:41:35これは、誰が・どこで・どうやって出してるんだ?
あと、環境を書け。
0929デフォルトの名無しさん
2005/06/06(月) 18:44:16Red Hat Linux 9
gcc 3.2
自分のPCで送信者と受信者、サーバを扱い、シュミレーション
みたいなことをやっています。
エラーはサーバから出されました。
0930デフォルトの名無しさん
2005/06/06(月) 19:18:24OSにIPアドレスとかポートとかを聞き出す
関数ってなんだっけ?
あーOSはLinuxでおねがいします。
つーか、ネットワーク関連の関数の
逆引き索引みたいなやつってないの?
0931デフォルトの名無しさん
2005/06/06(月) 19:33:00まったく最近の釣りもレベルが低くなったことよ。
0932デフォルトの名無しさん
2005/06/06(月) 21:02:40たぶんalarm使ってゴソゴソやってんだと思われるが、
readかwriteの実行中にSIGALRMが来てるだけだろう。
sigaction使ってSA_RESTART指定しろ。
0933デフォルトの名無しさん
2005/06/06(月) 21:52:10ありがとうございます。
今からやってみます。
0934デフォルトの名無しさん
2005/06/06(月) 23:41:50ありがとう
あとは、逆引きの索引がほしいなあ
0935デフォルトの名無しさん
2005/06/07(火) 00:57:190936デフォルトの名無しさん
2005/06/08(水) 15:44:26gethostbyname/gethostbyaddr, getaddrinfo/getnameinfoとの親和性が良かった。
>>934
以上をmanで読むこと。
0937デフォルトの名無しさん
2005/06/08(水) 15:47:31正引きしかないよ
0938デフォルトの名無しさん
2005/06/09(木) 13:56:18こういう事したいんだけど、使うのはどの関数? ってことでしょ?
昔はman/man -kで探し当てていたけど、
Linux(で日本語)なら、googleで「キーワード JM site:linux.or.jp」でどうよ?
0939デフォルトの名無しさん
2005/06/09(木) 14:39:27>逆引き索引みたいなやつってないの?
これって機能から関数名を調べたいっていう意味だろうね
0940デフォルトの名無しさん
2005/06/09(木) 20:39:36UNIX系の場合、たいした数じゃないので、
全部覚えた方がいいような気がするが。
WinSockだとあるのかな?
0941デフォルトの名無しさん
2005/06/09(木) 21:04:070942デフォルトの名無しさん
2005/06/09(木) 23:38:270943デフォルトの名無しさん
2005/06/10(金) 00:30:410944デフォルトの名無しさん
2005/06/10(金) 00:33:450945デフォルトの名無しさん
2005/06/10(金) 00:53:28ろくなドキュメントをそろえもせずに
口を開けば find grep man
あげくのはては ソースミロ
あほちゃうか
0946デフォルトの名無しさん
2005/06/10(金) 00:54:37その場しのぎの拡張の連続
0947デフォルトの名無しさん
2005/06/10(金) 01:02:25支離滅裂
0948デフォルトの名無しさん
2005/06/10(金) 01:16:44あるかどうかは知らんが。
0949デフォルトの名無しさん
2005/06/10(金) 01:18:10> getsockname とかに辿り着くまでにすげー時間かかったんですけど
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/socket.7.html
↑これ読んで終了って書こうと思ったら、間違ってるorz
> getsockbyname(2) はローカルのソケットアドレスを返し
< getsockname(2) はローカルのソケットアドレスを返し
0950デフォルトの名無しさん
2005/06/10(金) 01:19:59FreeBSDならハンドブックじゃないの?
http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/sockets-essential-functions.html
読みたくない人は検索ね。
0951デフォルトの名無しさん
2005/06/10(金) 01:43:39誰か書いて売ればいいじゃん。
「TCP/IP 500の技」ってのがあるけど、getsockname は買いてないみたいね。
0952デフォルトの名無しさん
2005/06/10(金) 01:49:45概念を素直に括り出しただけだと思うけど。
支離滅裂だと思ってる人は、実はソケットの概念を
ちゃんと理解してない希ガス。
UNIX の socket API なんて、4.2BSD の時に定義
されてからほとんど変わってないので、>>946の
言うようなその場しのぎの拡張なんてものは、
そもそもないわけだし。(WinSock は知らん)
あと、handbook もいいけど、
/usr/share/doc/psd/20.ipctut/
/usr/share/doc/psd/21.ipc/
も読んだ方がいいような。
*BSD系の場合ね。Linux は知らん。
まあUNP読めばいいんだけどね。和訳もあるわけだし。
0953デフォルトの名無しさん
2005/06/10(金) 02:01:59言い換えれば、要するに「低水準」「そのまんま」「剥き出し」
なインタフェースなんだよな。
昔から概念が存在するファイルのようには、高度に抽象化・単純化された
インタフェースにはなってない。
ソケットプログラミングは、open/read/write/closeでは済まずに
皆にioctlを強要するようなイメージ。
もっと標準に近いところで、Java程度に手軽なC/C++ライブラリが
あるといいのだが。
0954デフォルトの名無しさん
2005/06/10(金) 02:41:360955デフォルトの名無しさん
2005/06/10(金) 02:43:38普通socket/getaddrinfo/connect/read/write/closeだけで
済みますよ。openがsocket/getaddrinfo/connectに変わった
だけで、ファイルアクセスとレベルは変わらん。
0956デフォルトの名無しさん
2005/06/10(金) 03:10:24おめでたいな・・・
趣味レベルにとどめとけよ
0957デフォルトの名無しさん
2005/06/10(金) 03:21:19多いでしょ。たとえば古き良き finger なんて、実際その程度
のことしかしてない。
それ以外のAPIが必要なのは、socketシステムコールがファイル
アクセスシステムコールよりも低レベルだからじゃなくて、
背後にある概念がファイルアクセスよりも複雑だからだな。
レベルの高い低いは似たようなもん。
0958デフォルトの名無しさん
2005/06/10(金) 09:23:28>ろくなドキュメントをそろえもせずに
>口を開けば find grep man
じゃお前の部署で書いて晒せ
うちには予算が無い いや~ん(//∇//)
0959デフォルトの名無しさん
2005/06/10(金) 13:32:34凝ったことしなくてイイんなら、ディスクリプタを fdopen に突っ込めば
イイんじゃないの?俺は使ったことないから知らんけど。
0960デフォルトの名無しさん
2005/06/10(金) 14:16:44実際、4.3BSD以降の finger は、まさに fdopen() にソケットを
渡してる。
ただし stdio の実装がタコタコなOSだと駄目かも。
例えば SVR4 の 4.0.3 以降、4.1 より前では、fread() で
partial read を正しく処理してないため、ベンダが独自に
直してない限り fread() を使うと問題が出る筈。
0961デフォルトの名無しさん
2005/06/11(土) 01:22:44fd扱ってても結局ファイル扱ってるのかパイプ扱ってるのか
ソケット扱ってるのか意識しなけりゃならないし
0962デフォルトの名無しさん
2005/06/11(土) 01:25:41とにもかくにも作ってしまえばあとはまあそれなりに
ディスクリプタを等価に扱える ってのは便利だよな
問題は生成時の処理のデタラメ加減なわけだが
0963デフォルトの名無しさん
2005/06/11(土) 01:29:47「ファイル」って…「入出力ストリーム」です。
0964デフォルトの名無しさん
2005/06/11(土) 01:46:26と言えなくもないか
0965デフォルトの名無しさん
2005/06/11(土) 01:55:09表現する感覚が理解できん。
ストリームをディスクリプタで抽象化するという概念を
ちゃんと理解していたら、あれ以外の選択肢は、ほぼ
あり得ないのは明らかなのに、そういうことも分かって
ないのね。かわいそう。
0966デフォルトの名無しさん
2005/06/11(土) 02:01:03みたいなのはCだからしょうがないところはあるが、
キャストだらけの汚いコードを書かされる元
ユーザコード側の至る所でhtons, htonlなどを使う必要があるが、あれも
もっと減らせるだろ
プロトコルスタック側で変換かけりゃいいんだから
0967デフォルトの名無しさん
2005/06/11(土) 02:01:490968デフォルトの名無しさん
2005/06/11(土) 02:08:36キャストなんて要らないよ。
sockaddr は opaque な型として扱うので、sockaddr_in みたいな
構造を触る必要もない。当然 htons や htonl も全く使わない。
感覚古すぎるよ...
0969デフォルトの名無しさん
2005/06/11(土) 02:11:56そりゃすまんかった
0970デフォルトの名無しさん
2005/06/11(土) 02:43:480971デフォルトの名無しさん
2005/06/11(土) 02:47:330972デフォルトの名無しさん
2005/06/11(土) 02:51:18socket 関係のシステムコールは 4.2BSD の時に今のものと
ほぼ全く同じものが実装されて、その後、インターフェース
は特に変わってないんだけど。
自分が無知なのを自覚してないのか、それとも分かってて
デマを流しているのか、どちら?
0973デフォルトの名無しさん
2005/06/11(土) 03:05:100974デフォルトの名無しさん
2005/06/11(土) 03:07:27そのまま全く同じように使えると。こういうのは、普通
いきあたりばったりじゃなくて、先見の明があるって言
うよね。
0975デフォルトの名無しさん
2005/06/11(土) 03:13:09あ、あれはシステムコールじゃないか
0976デフォルトの名無しさん
2005/06/11(土) 03:15:38>>966の言う汚さを隠蔽するために新しいインタフェースが導入されてるわけで
>>968の言うような世界はもともとは無かった訳だから
>>970の言うことも必ずしも間違いとは言えまいよ
0977デフォルトの名無しさん
2005/06/11(土) 03:19:40右に左にフラフラしてたわけじゃなくて、まっすぐ自然な拡張
だと思うよ。システムコール自体は、最初っからプロトコル独立
になってたわけだしね。
0978デフォルトの名無しさん
2005/06/11(土) 03:24:26だから後で隠蔽するラッパーを作る必要があった
0979デフォルトの名無しさん
2005/06/11(土) 03:28:50ひょっとして全然分かってないんじゃない?
IPv6を利用する場合のAPIは、システムコールに
ついては以前と全く同じで、ラッパーでも何でも
ないよ。
ライブラリ関数として実装されていた以前の
gethostbyname(3)/gethostbyaddr(3) が、別の
ライブラリ関数である getaddrinfo(3)/getnameinfo(3)
に置き換わるだけ。これも、置き換えであってラッパー
じゃない。
0980デフォルトの名無しさん
2005/06/11(土) 03:33:54まあどうでもいいや
置き換えは置き換え。ようするにインタフェースが代わったのは事実だよね
昔のままでは対応できなかったと。
0981デフォルトの名無しさん
2005/06/11(土) 03:36:17getipnodebyname
gethostbyaddr
とコロコロかわってますな
0982デフォルトの名無しさん
2005/06/11(土) 03:36:55システムコールのラッパーと考える奴は
根本的にモノを分かってないと思われ。
0983デフォルトの名無しさん
2005/06/11(土) 03:38:54gethostbyname()とgethostbyaddr()を並べて「コロコロかわってる」って
言うわけね。(w
とりあえず、君はプログラミングはしない方がいいよ。
0984デフォルトの名無しさん
2005/06/11(土) 03:38:56でも、インタフェース変わってるのは事実でしょ。
で、なぜか昔からかわってないんだと主張する香具師もいれば
>>968みたいに、新しいインタフェースなら綺麗なんだと主張する香具師もいる
0985デフォルトの名無しさん
2005/06/11(土) 03:41:04getaddrinfoは本質的にはgethostbyname, gethostbyname2のラッパーじゃないのか
アドレスファミリの差異その他を隠蔽するための
0986デフォルトの名無しさん
2005/06/11(土) 03:42:060987デフォルトの名無しさん
2005/06/11(土) 03:43:59ネームサービスのためのライブラリ関数は、昔の
プロトコル依存した関数から、プロトコル独立の
きれいな関数に変わった。
全然矛盾してないと思うけど?
いきあたりばったりっていうのは、拡張に拡張を重ねて、
迷路みたいになったインターフェースことを言うんだよ。
昔よりずっと見通しが良くなったのを指して、いきあた
りばったりと表現するってのは、プログラミングだけ
じゃなくて日本語のセンスにも問題があるのでは?
0988デフォルトの名無しさん
2005/06/11(土) 03:47:02もしかして?
それこそどうでもいい話だな
0989デフォルトの名無しさん
2005/06/11(土) 03:49:39まあ色々あるわな
ネームサービス周りだけじゃないだろ
0990デフォルトの名無しさん
2005/06/11(土) 03:50:07gethostbyaddrじゃなくて
getaddrinfo
だった
まぁどうでもいいな
しかしなんでそんなに必死なのか
0991デフォルトの名無しさん
2005/06/11(土) 03:53:02size_t が socklen_t になったんじゃなくて、
int を使ってる OS と size_t を使ってる OS があった
ので、共通のソースにできるように socklen_t が定義
されただだよ。
つまり実際には型は変わってない。名前が統一されただけ。
0992デフォルトの名無しさん
2005/06/11(土) 03:55:100993デフォルトの名無しさん
2005/06/11(土) 04:10:300994デフォルトの名無しさん
2005/06/11(土) 05:27:180995デフォルトの名無しさん
2005/06/11(土) 05:55:31>どこどこ?
お前の事だ
0996デフォルトの名無しさん
2005/06/11(土) 09:49:590997デフォルトの名無しさん
2005/06/11(土) 09:51:580998デフォルトの名無しさん
2005/06/11(土) 10:04:230999デフォルトの名無しさん
2005/06/11(土) 10:05:101000デフォルトの名無しさん
2005/06/11(土) 10:29:2810011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。