ネットワークプログラミング相談室 Port13

このエントリーをはてなブックマークに追加
1 ◆FIcNi4f8js
2デフォルトの名無しさん:05/03/03 05:07:05
図書コーナー!(^O^*)

UNIXネットワークプログラミング〈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/
3デフォルトの名無しさん:05/03/03 05:08:28
★図書追加
TCP/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/
4デフォルトの名無しさん:05/03/03 05:15:15
★図書
TCP/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/
5デフォルトの名無しさん:05/03/03 05:17:12
BoostSocket
http://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/
6デフォルトの名無しさん:05/03/03 07:53:01
マルチクライアントのサーバーを作っているのですが、
接続できる最大のクライアント数はFD_SETSIZEで定義される数ですか?
7デフォルトの名無しさん:05/03/03 10:47:49
>>6
プログラム的にはそうだけど、OS的には別
8デフォルトの名無しさん:05/03/03 10:50:47
あ、嘘ついた。7は無しで。
9デフォルトの名無しさん:05/03/03 11:25:16
9様 & >>1
10デフォルトの名無しさん:05/03/03 13:36:43
>>7
OSも関係あるんじゃなかったっけか。
WinXPだったら10クライアントまでだっけか。
Linuxだったら無制限だっけか。
11デフォルトの名無しさん:05/03/03 13:48:23
>>10
それはライセンスの話で、ソケット的な制限があるわけではない。
それにLinuxだってソケット的に無制限なわけないでしょ。
どうチューニングしようと、カーネルメモリを使い果たしたら終り。
12デフォルトの名無しさん:05/03/03 14:28:48
ライセンスの話なのか。
10人以上接続できるやつを作っても10人しか接続できないものだと
今までずっと思ってた。

メモリは詳しくないから分からん。
むしろ「カーネル」のつくものはカーネルおじさんしか知らない。
勉強してきますorz
13デフォルトの名無しさん:05/03/03 14:34:47
ttp://www.apache.jp/misc/windows.html
の事を言ってるんだろうな
14デフォルトの名無しさん:05/03/03 23:26:54
前スレが終わったのでage!
15デフォルトの名無しさん:05/03/04 00:29:45
>>2に追加

TCP/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/
16デフォルトの名無しさん:05/03/04 22:00:05
winsockの使い方がなかなか覚えられない。
どうやって覚えるのがベストなのさ?
17デフォルトの名無しさん:05/03/04 22:02:25
>>16
とにかくやれ
18デフォルトの名無しさん:05/03/04 22:02:58
winsockの関数や構造体のほとんどは
UNIXでの名前を再定義しているだけだ。
実はUNIXのコードがほとんどそのまま使えたりする。
close()をclosesocket()に変えるぐらいか。
19デフォルトの名無しさん:05/03/04 22:05:17
HTTP 1.0クライアントでも作ってみれば?
コマンドラインならすぐできるでしょ。
20デフォルトの名無しさん:05/03/04 22:09:37
>>17-19
Winsockを使ったアプリケーションは今までに3回くらい作ったけど、
全然頭の中に残らないんさorz
winsockはC/C++で使ってるが、ん・・・。
WINAPIならサクサク入ってくるんだけどなぁ。

この際暗記的に覚えるしかないか。
21デフォルトの名無しさん:05/03/04 22:13:24
概念を把握してないんでしょ。
ネットワークは抽象的だから。
>>1のFAQを何回も読め。>>15も読んだ方がいい。
これを克服すると一つレベルアップ。
22デフォルトの名無しさん:05/03/04 22:22:45
>>18
クソBSDソケットの真似事しても無意味だと気付いたM$は
Winsock2.0の時点でさっさと独自API仕様に乗り換えたぞ
23デフォルトの名無しさん:05/03/04 22:28:23
その結果さらに大糞になってしまった。
24デフォルトの名無しさん:05/03/04 22:30:06
OSまるごと失敗続きのM$
25デフォルトの名無しさん:05/03/04 23:06:45
>>18
ただ、マルチスレッドが多く使われる分野だから・・・
UNIXとWinでは、その辺で移植に困る事があるんじゃない?
あと、fork
26デフォルトの名無しさん:05/03/04 23:10:13
>>18は古典的な釣りだよ。相手にしなさんな。
27デフォルトの名無しさん:05/03/04 23:13:40
なんでsocket関連使って作られたソースって汚いんだろうね
BSDでもwinsockでも
28デフォルトの名無しさん:05/03/04 23:14:45
BSD流は汚くなるけど
最初からwinsockで作られた奴は綺麗
29デフォルトの名無しさん:05/03/04 23:15:06
>>27
たとえば?
30デフォルトの名無しさん:05/03/04 23:18:45
マクロの使いすぎだよな。
ソースが汚いというのは、記述スタイルの話じゃなくて、
マクロ乱用のことを言ってるんだと思う。
31デフォルトの名無しさん:05/03/04 23:22:50
WindowsはSEHあるから、かなりシンプルにまとまると思うけど。
32デフォルトの名無しさん:05/03/04 23:25:45
マクロっつーか構造体の構造に一貫性がないと感じる。
なんかこう一本筋が通ってないというのかな。
33デフォルトの名無しさん:05/03/04 23:28:42
>>32
あーそれもある。名前のつけ方も刹那的だし。
34デフォルトの名無しさん:05/03/04 23:30:22
ひたすら改築増築を重ねてきたからだろうね。
35デフォルトの名無しさん:05/03/04 23:30:23
>>21
dクス。
やってみるさ。
36デフォルトの名無しさん:05/03/05 00:21:50
>>33
殺那的ワラタ

もっと整合性を考えて欲しいよな。
一から作るC#で直るかと思ったら…orz
37デフォルトの名無しさん:05/03/05 03:51:30
C#は次で手が入るっぽい
38デフォルトの名無しさん:05/03/05 21:43:47
テキストは送受信できても画像を送受信する方法が分からなくて色々試してたら、
ファイルをWINAPIのCreateFile云々を使ってchar型の変数に読み込んでそれをテキストファイルと同様に扱ったら送れたのですが、
画像はこのchar型変数の中でどうなってるんですか?
文字列として格納されているのですか?
char型変数を使うのが間違ってるのかなと思ったのですが>void型とか?
そこらへんどうなんでしょうか。
39デフォルトの名無しさん:05/03/05 21:47:15
「変数」?
「配列」って言いたいの?
4038:05/03/05 22:16:40
>>39
すいません、配列です。
41デフォルトの名無しさん:05/03/05 22:49:01
テキストだろうがバイナリだろうが、結局はただのバイト列だろ。
つか、ネットワークプログラミング関係無いし。
42デフォルトの名無しさん:05/03/05 23:44:48
>>39
の切り替えしにワラタ
43デフォルトの名無しさん:05/03/05 23:52:42
int はもっともPCに適したビット数(16 or 32 or 64) OSに依存
long は 32
short は 16
char は 8

配列はただのビット列なので区切りがわからないと扱いにくいから
型を指定してアクセスしやすくるす
charを使うと8ビットづつ shortを使うと16ビットづつといった具合

テクストは単にASCIIが8ビット単位しかないのでcharを使ってるだけ
Unicodeは16ビットになるのでshortになる

つか、ネットワークプログラミング関係無いし。
44デフォルトの名無しさん:05/03/06 00:10:24
>>43
>int はもっともPCに適したビット数(16 or 32 or 64) OSに依存
>long は 32
>short は 16
>char は 8

決まっているのは
sizeof(char)==1
char<=short<=int<=long
だけじゃなかったっけ?

つか、ネットワークプログラミング関係無いし。
45デフォルトの名無しさん:05/03/06 00:15:41
大嘘をもっともらしく言えるのも、匿名掲示板特有の現象ですよ
46デフォルトの名無しさん:05/03/06 00:33:16
もっともらしくすらないけどね。

つか、ネットワークプログラミング関係無いし。
4738:05/03/06 01:23:01
ありがとうございます。
えっと・・・char型よりもビット数の大きい型の変数を配列にしてやればいいんですね。

//スレ違いすいませんでした。
48デフォルトの名無しさん:05/03/06 08:24:03
>int はもっともPCに適したビット数(16 or 32 or 64) OSに依存

こんなこと言う奴初めて見た
しかもOSに依存ときた・・
49デフォルトの名無しさん:05/03/06 09:09:55
>>43
漏れのathlon64はlongが64bitです。どうすればよいでしょうか。
50デフォルトの名無しさん:05/03/06 09:28:42
longはint以上の大きさらしい。

long >= int >= short
51デフォルトの名無しさん:05/03/06 11:39:45
longも変動するのかしらんかった
intは処理系で一番高速なアクセスができるビット数だと定義されてると思ってたけど違った?
__int64とかって意味ないな
52デフォルトの名無しさん:05/03/06 11:43:23
>>51
このドアホ
53デフォルトの名無しさん:05/03/06 11:53:37
>>51
もしかしてsizeof(char)==1オクテットとか信じてる?
54デフォルトの名無しさん:05/03/06 12:12:20
>>52-53
まあ動けばなんでもいいじゃんw
55デフォルトの名無しさん:05/03/06 12:13:41
>>51
スレ違いだからみんな正しい解答なんかしないよ
さっさとどっかに逝け
56デフォルトの名無しさん:05/03/06 12:14:22
>>54
そいつが作った稚拙なソースが他人に渡らないのであればな。
57デフォルトの名無しさん:05/03/06 12:24:29
>>51
>intは処理系で一番高速なアクセスができるビット数だと定義されてると思ってたけど違った?
もともとの意味はそうなんだけど、int=32bitを前提にしてるアプリが多くて、
互換性に支障をきたすから、64bitな処理系でもintを32bitにする事が多い。

基本ルール
sizeof(char)==1
char<=short<=int<=long
int>=32bit

最後のだけは守らなくてもANSI C準拠になったはず。
C99じゃlong longも正式採用になったしどうなったんだろ?
5857:05/03/06 12:25:37
>int>=32bit
longだったかも・・・。
憶えてないや。
59デフォルトの名無しさん:05/03/06 12:46:19
いい加減スレ違いだからやめて欲しいけど、
上2段は正しいけど、規定されているのは、short>=16bitとlong>=32bitだけだよ。
intのサイズは間接的に>=16bitと決まるだけ。
60デフォルトの名無しさん:05/03/06 12:53:20
このスレ的にはC99を期待できるならintN_tやuintN_tを使えってことでいいんじゃないの
61デフォルトの名無しさん:05/03/06 13:10:46
結局誰も正確なことはわからんということでいいのでは?
必要ないしね、開発する処理系のビット数だけ把握してればいい話
まだほとんどint = 32なんだから
62デフォルトの名無しさん:05/03/06 13:12:53
>>61
どうしようもないバカだな
63デフォルトの名無しさん:05/03/06 13:15:04
んなことわかっててもたいしたソフトも組めないのじゃ意味ないけどねw
64デフォルトの名無しさん:05/03/06 13:37:47
こういうクズがのさばれるような業界だから
IT土方って呼ばれるんだよな。
65デフォルトの名無しさん:05/03/06 14:10:38
混じれ酢すると
言語仕様をいくら顧客に語ったところで、お金にはならないよ
生産性も向上しないよ、ないようによってはするものもあるけど
技術は技術でもアルゴリズムとかUIの既存以外のアイデアをいくつ持ってるか
応用して作り出せるかのほうが重要
それができないならただ言語仕様に詳しいだけのコーダー(土方)
って発想が普通では?
66デフォルトの名無しさん:05/03/06 14:32:08
例えば、IPヘッダのチェックサムなら、
#include <stdint.h>して、uint16_tを使う。以上。

>>65
プログラマ板行け、この呆け。
67デフォルトの名無しさん:05/03/06 19:44:35
16bit=>int==16
32bit=>int==32
64bit=>int==32


64bit以外は、確かにCPUにあわせたbit数になるため、最も高速にアクセス出来る。
64bitで最も高速にアクセス出来るのは、long longだ。

68デフォルトの名無しさん:05/03/06 19:56:51
大嘘をもっともらしく言えるのも、匿名掲示板特有の現象です
69デフォルトの名無しさん:05/03/06 20:15:36
つか、ネットワークプログラミング関係無いし。
70デフォルトの名無しさん:05/03/06 20:31:03
>>67って間違いなの?
俺もそう認識してたけど・・・
71デフォルトの名無しさん:05/03/06 20:33:07
マジレスすると、>>67は一応正解
http://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のまま
72デフォルトの名無しさん:05/03/06 20:59:42
CPUや吐かれるコード、最適化等に依存じゃないのか?
妄信的に決め付けるのは間違いの元
73デフォルトの名無しさん:05/03/06 21:26:47
>>71
そう、OSも と言うのが重要
CPUだけ64bitでも、OSが16bitDOSじゃ意味ネェよ
74デフォルトの名無しさん:05/03/06 21:46:26
いや正確にはリンカがライブラリモジュールを結合する際に32,64を区別してくっつけてるから
コンパイラ&リンカに依存してる
ただ普通は64OSなら64コンパイラを使うってことだと思われます。
75デフォルトの名無しさん:05/03/06 21:58:14
>>67,>>71 それ正解じゃない。
cray-1 なんかは short==int==long==64bitだった筈。
7675:05/03/06 22:03:05
補足。crayの件は、ぐぐったら↓に表があった。
ttp://grizzlyweb.com/webmaster/ccodestd/c_decl.htm
あれ、cray-2 って書いてあるな。まあいいや。
とにかく、そういうマシンもあるってこと。
77デフォルトの名無しさん:05/03/06 22:06:31
ぐぐってみたけど, 64OSでint = 32にしてるのは
AMD と Intel が暫定的にやってるだけの話のようだが?
78デフォルトの名無しさん:05/03/06 22:21:58
alphaとかでもintは32bitのままだったような。
まあ、DOSは16bitだし。

とりあえず、自分の周辺の事しか知らない
井の中の蛙にはなりたくないね。
79デフォルトの名無しさん:05/03/06 22:32:55
>>77
別に暫定的じゃない。こういう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マシンも
同様の定義を使うのが慣例。
80デフォルトの名無しさん:05/03/06 22:56:20
えーと、みんな気がすんだ?

では何ごともなかったように以下ネットワークプログラミングの話へ
81デフォルトの名無しさん:05/03/08 04:05:48
ネットワークプログラムは他者との強調が必要
プラットフォームに依存しない作りにすることを心がけるためにも
以上の話題に無関心なのは困る
82デフォルトの名無しさん:05/03/08 04:18:08
そもそもプラットフォームが違えばAPI仕様が根本的に違うので
意識しても無駄
どうしてもクロスなものが必要ならWrapperクラスを使うのが普通だし
そうなると意識する必要もない
よっぽどお馬鹿なことでもしないかぎり問題になることもない
桁数が精度に影響するようなつくりをする時点でいくらそういったことが
わかっていてもはっきりいって論外
桁溢れする可能性のあるものは文字ベースで扱うのが普通ですよ
それにtypdefってのはそういうことのためにあるものだし
83デフォルトの名無しさん:05/03/08 04:43:24
散々他の人にバカにされてるのに
まだそんなこと言ってるのか
84デフォルトの名無しさん:05/03/08 05:03:17
時には割り切ったコーディングも必要だし
理想を求めるのも必要
85デフォルトの名無しさん:05/03/08 09:16:44
てゆうか整数型のサイズどころかAPIまで違ってる
システムの間でも通信はできるし実際やってるわけ
ですが。だからこのスレで話題になるんでしょ。

あとどうでもいいけど整数型のサイズは違う(ABIは
当然違う)が、APIは同じってシステムはかなり多いよ。
UNIX系はそんな感じだし。UNIXとWindowsの間でも
ISO-CとかC++で定義されているAPIは同じなんだし。
86デフォルトの名無しさん:05/03/08 11:23:53
>>82
アフォ?
87デフォルトの名無しさん:05/03/08 11:45:31
>>85,82
GCCしか使わない人ですか?
88デフォルトの名無しさん:05/03/08 12:19:02
>>85
はAPIの意味を根本的に取り違えてると思われます。
クロスプラットなソース書こうと思ったら
#if
VC用
#else
ボーランド用
#else
UNIX系用
#endif

って感じで結局別個に書くか、GygwinやMinGwやkylixのようなWrapperライブラリを
使うことになる
まあたしかに、速度の限界を追求するような例えば、圧縮ツールなんかの場合は
上記のように個別に記載することもあるけどね
ネットワークプログラミングでそこまでやってたらバグの元をわざわざ作るようなもんだ
89デフォルトの名無しさん:05/03/08 13:00:54
まぁ個々の実力に合わせて適当なところでライン引けや。
90デフォルトの名無しさん:05/03/08 13:25:21
>>89
あほか
91デフォルトの名無しさん:05/03/08 14:41:32
前に出ていたがsocket系は刹那的なプログラミングする香具師が多いという意見には同感。
ちょっと作って動けばいいやってそのままブラッシュアップされずに放置、みたいな。
何でいつまでも同じ過ちが繰り返されるんだ?
92デフォルトの名無しさん:05/03/08 14:42:55
>>89
つまり低能はプログラミングをするな、ということですね。
93デフォルトの名無しさん:05/03/08 15:18:45
>>91
そんだけ開発者にとってめんどっくさいIFだってことだろ。
俺はそうはおもわないんだけども。
94デフォルトの名無しさん:05/03/08 16:53:56
BSD socketは概念としてはいいけどAPIはクソだと思うね。
95デフォルトの名無しさん:05/03/08 18:55:39
>>94
Unix的な極Primitive指向だもんな。

その代わりにWin32 APIなんかと比べると命令セットの肥大化を
うまく抑えて必要最低限なものだけで済むメリットもある、と。
96デフォルトの名無しさん:05/03/08 20:02:40
もともとの意味はそうなんだけど、ポインタ=32bitを前提にしてるアプリが多くて、
互換性に支障をきたすから、64bitな処理系でもポインタを32bitにする事が多い。
97デフォルトの名無しさん:05/03/08 20:08:20
>>96
そんなコード、見たことねぇな。恵まれた環境で仕事してるんだなぁ、俺(*´Д`)
98デフォルトの名無しさん:05/03/08 21:22:22
ここのみんなは ACE って使わんの?
俺も使ったことはないんだけど、なんかよさげだよ。
99デフォルトの名無しさん:05/03/08 21:29:36
64bit UNIX でも 64bit Windows でもポインタは 64bit じゃん。
その「多い」って、いったいどこの処理系の話よ?
100デフォルトの名無しさん:05/03/08 21:36:42
しー。
目を合わせちゃ駄目ですよ。
101デフォルトの名無しさん:05/03/08 22:17:55
>>99
UltraSPARCとかそうじゃなかったっけ?
32bit互換モードとかあった気がする。
10299:05/03/08 22:24:21
32bitモードは、sparc64 に限らず、どのCPUにもあるよ。
でも32bitモードは、「64bitな処理系」じゃない。
単なる「32bitな処理系」。
103101:05/03/08 22:34:43
あらら、もしかして>>96
64bitモードでもアドレスをuint32_tとかで扱うってことを言ってるのかしらん。
でも、それじゃ動かないよね?てっきり互換モードの話かと。。。
104デフォルトの名無しさん:05/03/08 22:45:01
いや、32bitOS(Win95等)で16bitプログラム(Win3.x用)を動かす、
なんて事は今までも多々あったし、XP64でも当然32bitプログラムは動く。
もちろん、x86に限らず、普通の64bitOS上では
既存の32bitバイナリがそのまま動くのが一般的。

もし>>96が「64bitOS上で32bitプログラムを動かす」ことを言っているなら
ただのバカだよ。
いや、「64bitOS(64bit処理系)でもポインタは32bitにする」と言ってるとしても
ただのバカであることに違いはないけど。

もしかしたら同一人物かもね。
http://pc5.2ch.net/test/read.cgi/tech/1109121175/38-
105デフォルトの名無しさん:05/03/08 22:58:22
32bit互換モードってまたIntelの8086セグメント方式が復活するみたいで嫌だな
106デフォルトの名無しさん:05/03/08 22:59:34
>>105
バカ
107デフォルトの名無しさん:05/03/08 23:09:08
javaでrawソケットって使える?
108デフォルトの名無しさん:05/03/09 02:45:49
せっかく64bit使ってるのに32bitの壁なんて考えたくも無い
109デフォルトの名無しさん:05/03/09 02:55:09
>>107
具体的には何使うの?
packet caputureなら、http://netresearch.ics.uci.edu/kfujii/jpcap/doc/←がある。

>>93
うーん、ソケットAPIの問題よりも、
ネットワークプログラミング固有の問題の方がずっと障壁になっていると思う。
ヘテロ環境への配慮、failureへの配慮など分散型システム固有の問題が。

集中型システムで頭固まっていると嵌まりやすい。
特に初級を脱却するくらいの時は天狗になっているケースがあって、
過去スレでも暴れる人が何人もいた。
110デフォルトの名無しさん:05/03/09 03:43:00
unixソケットはあんまりよく知らないけど
winsockはひどいもんだな
例えば、Asyncにしようとするとウィンドウへイベントって形でやらないといけないけど
クラスにシンプルにまとめようとしたときこれはかなりじゃまになる
接続が成功したか、失敗したか、途中で切れたかって判断がかなり複雑になる
からそのつど、プログラム量がけっこう多くなる
この辺はunixでもいっしょかな?
単純C/Sだとサーバ側がちょっと複雑になるだけですむけど、分散システムになると
もうわけわからんくなるね
111デフォルトの名無しさん:05/03/09 04:05:50
UNIXのaio_*は、
http://docs.hp.com/ja/B2355-60104-09/aio.5.html
な感じなら。

例によってprimitive形式で、frameworkまでいってないから、
初級者はパニックだろうね。
俺も正直なところあまりこれといった実績がないね(w
112107 :05/03/09 04:47:07
>>109
ありがと
113デフォルトの名無しさん:05/03/09 12:12:43
そもそもコネクションが切れるって動作は必要ないと思うんだよね
切れたら、再接続に向かってどうしても繋げない状態を検出したら
その状態を検知した上でabortするような仕組みにすればいいのに
数十秒待たされたあげくに、実は切れてるねんとかいう今の仕組みはよくない
FTPやHTTPはこの切れを前提で作られたプロトコルだからいまさらどうしようもないのだろうけど
114デフォルトの名無しさん:05/03/09 12:14:53
これだからトウシロは・・・
115デフォルトの名無しさん:05/03/09 12:21:41
>>113
アホは存在すること自体が罪。死ね。
116デフォルトの名無しさん:05/03/09 12:22:59
>>113はいくらなんでもネタだろ
117デフォルトの名無しさん:05/03/09 15:06:39
>>110
別にAsyncはウィンドウ必須じゃないんだけど。
118デフォルトの名無しさん:05/03/10 10:14:28
>>114、115、116
そこを論理的に教えて使えるようにするのがプロの仕事では?










もう教育係いやだ。。。(´Д⊂グスン
119デフォルトの名無しさん:05/03/10 10:56:39
>>118
ここは学校でも会社でもないからな
120デフォルトの名無しさん:05/03/10 12:48:09
>>117
socketoptで非同期通信にすると当然ぐるぐるまわさないと
即時応答はできない
そうなるとスレッドを使わないといけなくなるわけだが、ぐるぐる回す時点でかなり
リソースの無駄使い
しかもVC++のクラスはスレッドセーフじゃないのでかなりかっちょわるいソースになる

つーか>>114-117はwinsock知らないだろ?
121デフォルトの名無しさん:05/03/10 12:56:50
>>120
ハァ?何言ってんだお前。
122デフォルトの名無しさん:05/03/10 13:00:22
かっちょわるいのは>>120の脳内だけで勘弁
123デフォルトの名無しさん:05/03/10 14:04:01
>>118
では漏れが。
Winsockでウィンドウとメッセージポンプを使いたくないなら(当然使いたくないが)、
・セッション数が少ないならスレッドで普通にselectしつつ動作
・セッション数が多いならWSAEventSelect とかIOコンプリーションルーチンやらを使う
あたりが定番。

サーバアプリなどで性能が要求される場合には、IOコンプリーションルーチンつきの
IOリクエストを常時複数投入しておいて、カーネルが待ち時間無しで随時IO処理できる
ようにすることもある (IOキューイングという手法)。

UI オリエンテットなアプリで、通信のスループットなんかどうでもいい場合にはウィンドウ
メッセージを使う場合もある(のか?やったことないけど)。
124デフォルトの名無しさん:05/03/10 16:19:06
>>113 は単に TCP に対する愚痴じゃないの?
125デフォルトの名無しさん:05/03/10 16:39:34
>>124
いやしかし、>>113
>切れたら、再接続に向かってどうしても繋げない状態を検出したら
>その状態を検知した上でabortするような仕組みにすればいいのに
ってまさに今のTCPそのもののように思うんだけど・・・
数十秒も頑張らなくて良いよ、ってことなのかな。
126デフォルトの名無しさん:05/03/10 19:07:24
>>125
今のTCPのどこがそこまでしてくれるんだ?
コネクション確立っていっても定期的に状態確認しあってるわけでもないし
ちょっと瞬断しただけで、コネクションが切れて
しかもデータのやり取りが発生するまでは無反応
それが今のTCPの仕様
127デフォルトの名無しさん:05/03/10 19:15:25
>>126
KeepAliveをONにすればしてくれるでそ。
んで、KeepAlive始めるまでの時間の諸口が長く、またコネクション毎にこの時間を設定できないOS/
プロトコルスタックが殆どで使いにくいのは確かだけど、これはTCP/IPの責任ではないと思う。

じゃあ誰のせいだ、というとよくわからないけど。
TCP/IPのKeepAliveは使わないで上位プロトコルでやるという伝統のせいか?
128デフォルトの名無しさん:05/03/10 19:15:54
>>127
訂正: 「使いにくい」⇒「使い物にならない」
129デフォルトの名無しさん:05/03/10 19:33:44
ネット速度もかなり高速化してるし
この際、新しいプロトコルを考えてもいいかもね
130デフォルトの名無しさん:05/03/10 19:45:45
プロトコロの問題じゃなくて、利用する側の問題だろ。
再接続したければ、再接続すればいい。
>>126は低能だから無視。>>120>>113も同様。

> 再接続に向かってどうしても繋げない状態を検出したら

出来る時はしているのに、
低能ゆえ出来ない時がどういう時か理解できずに見当違いの愚痴を言う呆け。
131デフォルトの名無しさん:05/03/10 21:01:53
>>130
ネットワーク高速化してるのに、低脳ゆえ出来るときが多様化してることにも
気づかないのですね?
132デフォルトの名無しさん:05/03/10 21:52:46
元気、元気、元気な子供は腋毛がざるそば!
こんにちわ。プロトコロジョージです。
133デフォルトの名無しさん:05/03/10 22:54:00
>>129
window scalingとかselective ackとかTCPも進化してるぞ。
134デフォルトの名無しさん:05/03/11 00:23:03
ネットワー君です。
135デフォルトの名無しさん:05/03/11 00:26:58
>>133
そういう問題以前の戯言と思われ。
136デフォルトの名無しさん:05/03/11 00:29:57
再接続ワラタ
137デフォルトの名無しさん:05/03/11 01:15:54
最近はNATの内側にいる人が多いから
本来のTCP/IPの再接続が出来ない環境に
なっている人も少なからずいる。
>>113 >>120 >>126
それを知らずに愚痴ってるだけ。
138デフォルトの名無しさん:05/03/11 02:33:38
>>137
> 本来のTCP/IPの再接続

って何よ? TCPのRSTのこと?
139デフォルトの名無しさん:05/03/11 20:10:56
POP3 に関して質問です。

POP3サーバが LIST コマンドを受けたときに返す、メッセージの
オクテット数についてですが、メッセージの中に "." で始まる行が
あった場合、この "." を2オクテットではなく、1オクテットと数えな
ければならない、っていうことでしょうか?

参考:

http://www.ietf.org/rfc/rfc1939.txt
11. Message Format

http://srgia.fc2web.com/docs/rfc1939j.html#11
11. メッセージ形式
140デフォルトの名無しさん:05/03/11 20:24:53
全然血が牛
141デフォルトの名無しさん:05/03/11 20:31:32
改行スタイルの話だろう。
142デフォルトの名無しさん:05/03/11 20:58:01
>>139
 あってます。multiline response の形式としては、termination octet (.) で始まる行は
先頭にもう一つ termination octet を付けることになっているが、メッセージのオクテット数
を数える上では行頭のtermination octetを2倍に数える必要はない(数えてはいけない)、
ということです。

改行については特に質問されていないようですが、改行は当然2オクテットで数えます。
143デフォルトの名無しさん:05/03/11 20:58:19
ラインバッファ方式のサーバもあるから
あんまり長いとバッファオバーフローおこしちゃうでしょ
まあこれくらいにしといてよってことの話でしょ
70以下に抑えときゃまああんま深く考える必要もないかもしれん
144デフォルトの名無しさん:05/03/11 21:08:50
>>143
なんか質問とは全然関係ないような気もするが・・・
確かに、以前調べたときは1024バイト程度でJISのシフトINとか無視して
勝手に改行入れてくれるMTAが結構あった。

仕事でMUA作ってたんだけど、そういうので化けてもOKにする必要が
あってメンドクサカッタなぁ。
145デフォルトの名無しさん:05/03/13 11:40:39
selectで待ち受けられるディスクリプタの
登録の上限数ってどこに書いてあったっけ

OSはredhat9でカーネルは2.4.26使ってます
何も考えずに800本くらい使ってるけど
このくらいなら大丈夫だったっけか
146デフォルトの名無しさん:05/03/13 12:20:43
FD_SETSIZE を再定義しているのであれば、
select 側には特に制限はない。
むしろファイルディスクリプタ数の方の
制限で決まる。

ただ、800ぐらいの数になると、epoll(4)
とか kqueue(2) とか使った方が速い可能性
がある。こいつらは今のところあまり移植性が
ないので、libevent を使うのが吉。
ttp://www.monkey.org/~provos/libevent/
147デフォルトの名無しさん:05/03/14 22:30:18
質問です。
MSNメッセンジャーにあるような、NATの種類を判別するプログラムはどのようにすれば良いのでしょうか?
シンメトリックの場合とそれ以外の場合とで処理を別にしたいのですが・・・。

よろしくお願いします。
WinSockで組んでいます。
148デフォルトの名無しさん:05/03/14 23:33:01
両端のプログラムを書けるなら出来るかもね
149デフォルトの名無しさん:05/03/14 23:35:59
>>148
なんの話?
150デフォルトの名無しさん:05/03/15 04:00:54
UDP hole punching
151デフォルトの名無しさん:05/03/15 09:35:01
FD_SETの戻り値はなんですか?
152デフォルトの名無しさん:05/03/15 10:50:49
0
153デフォルトの名無しさん:05/03/15 11:58:32
>>151
マクロなので sys/select.h か sys/types.h あたり見て確認しる
154デフォルトの名無しさん:05/03/15 14:07:42
仕様上は戻り値なし(void)と解釈しておいた方が
良いと思われ。引数範囲チェックとかもなし。
155デフォルトの名無しさん:05/03/15 19:30:15
>>154
FD_SETを1万回やったらどうなるかなというちょっとした好奇心
156デフォルトの名無しさん:05/03/15 19:45:59
100万回生きた猫
157デフォルトの名無しさん:05/03/15 21:10:15
質問です。
UDPは到着順も保障されないと言う事ですけど、
これは、送信時に大きなデータをWinsockが勝手に細かく切って送信した場合の到着順も保障されないのでしょうか?
158デフォルトの名無しさん:05/03/15 21:12:47
>>157
はい。
159デフォルトの名無しさん:05/03/15 21:14:33
フラグメントは、受けとったカーネルが組み立ててから
アプリに渡すので、アプリからみると、分解されてない
ように見える。
もし、フラグメントが一つで途中で失われると、パケット
全体が失われる。
160デフォルトの名無しさん:05/03/15 21:23:27
>>159
失われるだけで、順番は正しくなるのでしょうか?
失われるだけだと、再送処理を行えば良いだけなんですが・・・。
161デフォルトの名無しさん:05/03/15 21:45:12
>>160
逆に不ぞろいだったとして、カーネルが制御してるものをどうやって順番に並べるの?
162デフォルトの名無しさん:05/03/15 22:12:43
>>161
いやー、だからエラー処理は出来ないのかなぁ?と
最初から分割されるサイズを考慮して、プログラムでそのサイズを超えないように分割しないといけないのかな?と
163デフォルトの名無しさん:05/03/15 22:13:16
てゆうか、フラグメントに分割されたパケットに
関しては、カーネルが順番どおり並べてくれるの
で問題ない。ただし、全パケット届けば。

パケット損失確率がある程度高いネットワークだと、
フラグメントが失われる→全再送が生じてネットワーク
バンド幅を無駄使いすることが多くおきるので、
UDPの1パケットは、あんまり大きくしない方が良いことが
多い。
164デフォルトの名無しさん:05/03/15 23:04:53
バイトオーダーってWindowsもLinuxもFreeBSDもその他PC UNIXも全てリトルエンディアンですか?
CPU依存とのことなのでCeleron, Pentium, Athlon, K6を使うOSは全てリトルエンディアンですよね?
165デフォルトの名無しさん:05/03/15 23:07:28
> CPU依存とのことなのでCeleron, Pentium, Athlon,
> K6を使うOSは全てリトルエンディアンですよね?

これは、その通り。

> LinuxもFreeBSDもその他PC UNIXも全てリトル
> エンディアンですか?

Linux や FreeBSD は、PC だけでなくビッグエンディアンの
マシンでも動くので、OS だけからは何ともいえない。
166デフォルトの名無しさん:05/03/15 23:22:31
>>165
FreeBSD同士でも企業の使ってるでかい箱とPCとでは
バイトオーダーが違うこともあるということですか?
167デフォルトの名無しさん:05/03/15 23:24:46
>>166
当たり前の事を聞くなよ
168デフォルトの名無しさん:05/03/15 23:27:30
SPARCで動くFreeBSDが無いわけじゃないからなぁ
169デフォルトの名無しさん:05/03/15 23:28:19
互換性のためにエミュレートしてでも同じにしてると思っていたので。
170デフォルトの名無しさん:05/03/16 00:05:23
>>169
それは勘違い。
*BSDやLinuxはそういうレベルでの互換性を保ってはいない。

171デフォルトの名無しさん:05/03/16 00:36:56
なんとか理解できました。ども>ALL
172デフォルトの名無しさん:05/03/16 01:16:59
transactions per secondを一定量にコントロールするコツってなんでしょうか?
多様なバイナリならば、ヘッダ部とデータ部が分かれていると思いますが
1度処理したら次の処理許可まで、ヘッダ部を解析してデータ部は読み捨てを繰り返すしかないのですか?
173デフォルトの名無しさん:05/03/16 02:20:39
>>166
ちっちゃいMac miniもPowerPCでビッグエンディアン。
174デフォルトの名無しさん:05/03/16 03:06:35
>>172
何の話やねん!?
175デフォルトの名無しさん:05/03/16 03:08:04
1秒間に何回同期処理をするか。連投禁止処理だね。
176デフォルトの名無しさん:05/03/16 04:42:51
僕のちんちんは大きくならないんでしょうか?
177デフォルトの名無しさん:05/03/16 10:43:29
SNMPってポート何使ってたっけ
178デフォルトの名無しさん:05/03/16 10:52:18
UDP:161,162

ていうかそんぐらいすぐ見つかるから調べれ。
179デフォルトの名無しさん:05/03/16 11:05:03
>>178
ありがと
ググッたらすぐ出てきた。これ有名なプロトコルなのな。
知らなかった世。

これって、UDPだけど双方向にデータやり取りするよね。
どうやってるの? 送信してきたポートに返してるの?

162の方は片方向みたいだけど。
180デフォルトの名無しさん:05/03/16 11:52:43
>>179
RFCよめ
181デフォルトの名無しさん:05/03/16 13:29:55
>>180
ありがと
RFC日本語見つからなかったからパケットキャプチャしてみた。
これって発信元ポートに返してるんだな。
なんでTCPにしなかったのかな。
ブロードキャスト?とかするから?
182デフォルトの名無しさん:05/03/16 14:04:42
なおさら、RFC嫁
183デフォルトの名無しさん:05/03/16 14:13:23
>>181
てか、おめぇ調べる気ねぇだろ。
やってる事がずいぶんと半端じゃねぇか?
184172:05/03/16 21:01:22
TPSの調節なんてみんなしてないのか。
まあゲームとかチャットとかコミュニティ向けの技術だしな。
185デフォルトの名無しさん:05/03/16 23:26:31
>>181
ttp://www.faqs.org/rfcs/rfc3430.html
実装してるの見たことないが。
186デフォルトの名無しさん:05/03/17 01:02:09
>>184
何言ってんだ?

突然、

>>172
> 多様なバイナリならば、ヘッダ部とデータ部が分かれていると思いますが

って頭おかしい人かと思ったぞ。「ならば」て
187デフォルトの名無しさん:05/03/17 01:08:12
ゴミレスしかできないなら黙ってればいいのにw
188デフォルトの名無しさん:05/03/17 01:49:33
でも客観的に見て何を言ってるのか理解の出来ない文章ではあるよ。
目的は何?帯域制限の話?それとも何か別の事?
そして>>172の書いてる俺技術についての中身が全くわからないし。
とりあえずエスパーきぼんぬに該当するなとしか思えなかったからね。

>まあゲームとかチャットとかコミュニティ向けの技術だしな。
これにはちょっと興味がわくので、他の人にもわかるように書きなおしてほしいね。
189デフォルトの名無しさん:05/03/17 02:04:39
俺は、なんか問題を間違ったレイヤで解決しようと
しているような印象を受けたな。>>172は、おそらく
制限値以上のレートでパケットが届いたらそれを
無視しようって意味のような気がしなくもないが、
>>186>>188の言うとおり、エスパーきぼんぬと
しか思えない。

まあ、RTPの本でも読んでみたら?
ttp://www.amazon.co.jp/exec/obidos/ASIN/4274065618/
とか。
190デフォルトの名無しさん:05/03/17 03:01:51
受信の帯域制限ってソフトウェアで調節できるものなの?
191デフォルトの名無しさん:05/03/17 03:16:49
遅くしたけりゃいくらでも遅く作れるべ?相手に待ったをかけれるように作れば。
192デフォルトの名無しさん:05/03/17 03:23:26
読み取り量を減らせばそら作れるけど
送受信バッファが溢れる〜ってことになったりせんの?
193デフォルトの名無しさん:05/03/17 03:29:31
>>192
それくらい試せるべ?
194デフォルトの名無しさん:05/03/17 03:37:12
速度のまったく異なるPCが混在しているこの世の中じゃ

ポイズン
195デフォルトの名無しさん:05/03/17 04:31:50
>>193
バッファがページファイル化されて余計だめっぽかった。
むしろ溢れろよと。
196デフォルトの名無しさん:05/03/17 05:05:32
いったいどうやったら195みたいな結論に
至ることが可能なんだ?

TCP使ってるなら、受信可能なバイト数は常に
ウィンドウサイズとして受信側のカーネルが
送信側のカーネルに伝えているから、読みとり
を減らせば、ウィンドウが閉じて、送信側が
勝手に待ってくれる。溢れることもなけりゃ、
ページアウトされることもない。少なくとも
UNIX系OSの場合、ソケットバッファに滞留して
いるデータは、物理メモリに常駐しているから。

この場合、まず送信側のカーネルメモリに溜り、
SO_SNDBUF のサイズ越えて溢れそうになったら、
今度は送信を行おうとするアプリケーションが、
送信システムコールを発行するところで止められる。
197デフォルトの名無しさん:05/03/17 09:04:10
前から思うんだけど、Winsockって関数自体にタイムアウト設定が出来る仕様があれば便利だよね。
connect()とかrecv()とか、指定時間たっても結果が得られなかったらfailedを返してしまうみたいなオプションがあればどれだけコードがスマートになるか・・・・

なんで実装しないんですかね?
198デフォルトの名無しさん:05/03/17 09:08:35
そんなの簡単に実装できるんだから、必要なら
ユーザが実装しろってことじゃなくて?
199デフォルトの名無しさん:05/03/17 10:30:58
>>197
selectすればいいじゃん
200デフォルトの名無しさん:05/03/17 10:54:16
>>197
激しくガイシュツなんだが、
WinsockのI/0タイムアウトはやばいから気をつけろ。
特に2000Pro以前。詳しくはMSDN読んでくれ。
201デフォルトの名無しさん:05/03/17 11:00:43
HTTPは、
503 Service Unavailableの時に
Retry-After: 60
で、retry間隔を指定して、Layer 7でのcongestion control。
202197:05/03/17 11:07:33
>>198-199
いやぁ、その処理の為にわざわざ別の関数を持ってきてコード書くんだったら
connect()とかにそういうオプションをつければ行で済むしスマートじゃないかなぁ と。
詰めて三行程度で書ける、たかが三行だけど出来上がったコードはスマートじゃないよね。
接続 と言う目的以外の処理コードがあるんだから・・・。

1つの関数の引数を複雑にするくらいなら、関数の数を増やした方が良い って考えはわかるけど
この程度の為に色々持ち出すのも・・・・。
203デフォルトの名無しさん:05/03/17 11:11:04
WindowsのAPIの設計者は>>202と同じような考えの人が結構いますね。
引数が山のようにあって、引数で出来ることと出来ないことに対称性が全くない。
204デフォルトの名無しさん:05/03/17 11:45:46
>>202
それが気になるなら、タイムアウトつきの処理を
connect_timedwait() みたいな関数として独立
させて、メインの処理からはそれを呼ぶだけに
すれば?
205デフォルトの名無しさん:05/03/17 12:11:01
>>202
そんなこと言いだしたらconnectに限らず時間のかかる全ての関数に
timeout引数が欲しいってことになってくるじゃねーか
206デフォルトの名無しさん:05/03/17 12:17:50
int memcpy(void *dst, const void *src, size_t len, const struct timespec *timeout);
207デフォルトの名無しさん:05/03/17 12:21:17
>>204
だから、みんなが独自に connect_timedwait() を作るのは馬鹿らしい
ってことでしょ。OS に同梱されているならともかく。

208デフォルトの名無しさん:05/03/17 12:22:19
>>204に同意
単純に接続するだけの、connect関数と
その関数に対する待機は別問題とおもう。
209デフォルトの名無しさん:05/03/17 12:25:28
connect なりなんなりの、ただ一つの要求だけタイムアウト
待ちしたいというのがむしろ特殊な要求で、むしろselectで
複数待つ方がふつうだから用意するまでもないんでしょ。
210デフォルトの名無しさん:05/03/17 12:26:48
いつでもコネクトできるか失敗するまで待つわけでもなかろう。
211デフォルトの名無しさん:05/03/17 13:31:45
UNIX Socket FAQ
6.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
212デフォルトの名無しさん:05/03/17 13:35:32
ちなみにWinsockはタイムアウトじゃなくて非同期ソケット使うのが良いよ。
>>200にも書いたが、タイムアウトが起きると先頭のデータ失うから。(古いWindowsで)
213デフォルトの名無しさん:05/03/17 13:53:00
>>207
自分用ライブラリには標準装備した。
簡易的なクライアントソフトってセッション1つで
十分だからselectは接続後にしか使わない
そんな感じ
214デフォルトの名無しさん:05/03/17 17:16:46
各自がバラバラに実装するのが馬鹿らしいからこそ、そういう
ライブラリを公開して広く使ってもらえるようにすればいいのに。
Windowsユーザって、なんでそういう発想ないの?
215デフォルトの名無しさん:05/03/17 17:32:02
それは、すべてMSの仕事ってわけでもないだろう。
ライブラリライブラリっていうが、
もともと使いにくいと言って出てきた関数は言うなればAPIみたいなもんだろ。

それらを組み合わせ使いやすいように拡張するのがライブラリなのであって、
そのライブラリはMS製だろうが、オープンソース物だろうが関係ないんでは?

Windowsユーザーだなんだって話じゃなく、便利なライブラリがほしいだけ、
そのライブラリ作成者になろうとすら思わない、お前に一つも問題はないっていうのか?
216デフォルトの名無しさん:05/03/17 17:36:04
非Windowsユーザではなかろう>>214が(サブとしては持ってる?)
何で>>215のためにライブラリを作るの?
217デフォルトの名無しさん:05/03/17 17:37:25
非Windowsユーザであろうだな
なくなくない?みたいな間違いをしてしまった
218デフォルトの名無しさん:05/03/17 17:39:17
え、俺メインはLinuxなんだけど・・。いらないよWinsockのラッパライブラリなんて。
219デフォルトの名無しさん:05/03/17 17:43:27
あ、>>214が言ってるのは、MSがなぜ用意しないのかってのじゃなくて、
ライブラリ作成者が便利なものつくったのなら、なぜ皆に公開してあげないの?
って言いたいのね、読み違えまくった・・・吊ってくる orz

Windows系の開発者さんたちは、確かにそういう傾向の人多いかもしれないね。
220デフォルトの名無しさん:05/03/17 18:59:44
確かに作ってもバイナリ配布が多いな。配布条件も厳しい。
221デフォルトの名無しさん:05/03/17 19:07:21
1クライアントにソケットを2つ使うべきか、ひとつで頑張るかで迷ってる。
直感でいいから、きゅぴーんと来たほうを言ってくれ。頼む。
222デフォルトの名無しさん:05/03/17 19:10:40
>>221
FTP を見よ。
223デフォルトの名無しさん:05/03/17 19:29:13
いやFTPでいうところのPassiveモードだけど、それが何か?
224デフォルトの名無しさん:05/03/17 20:38:15
まあ、その場合だと、普通は二つだな。
225デフォルトの名無しさん:05/03/17 20:45:14
Broken pipeってどうやって解決したらいいと思う?
FreeBSDの鯖にWinの倉でコネクトした後色々通信してクローズするとそうなります
226デフォルトの名無しさん:05/03/17 21:09:55
Broken Pipe が起きるってことは、こちらの返事を相手が
全部読まないうちに、相手側がコネクションを切断してし
まったってこと。正常に通信してても頻繁に起きるような
ら、どちらかがプロトコル処理を間違えてる可能性がある。

FreeBSD 側に関しては、ネットワークトラブルでそういう
ことが起きることはあるし、クライアント側が勝手にこけ
てもそういうことは起きるので、サーバ側としては正しく
動作を継続するために、signal(SIGPIPE, SIG_IGN) として
おく。こうすると SIGPIPE が飛んでくるんではなく、
write(2) や close(2) が EPIPE を返すようになるから、
エラーコードをきっちり見て、きれいに後始末すること。

クライアント側でもネットワークトラブルでそういうこと
が起きることがあるのは同じだけど、この場合、むしろ
サーバー側のプログラムミスの可能性の方が高いかもね。
って Winsock って、Broken pipe の場合どういう反応を
するんだっけか?
227デフォルトの名無しさん:05/03/17 21:24:31
例えば、CLOSE_WAIT中にRSTが来た時、
送ろうと思ったけど、何らかの理由で送れなかった時。
228デフォルトの名無しさん:05/03/17 21:26:28
half-closeになってねえ?
↓Javaだけど、half-close問題は同じ。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/net/articles/connection_release.html
229225:05/03/17 22:16:32
ソケット閉じる前に一回リード処理したらBroken pipe出なくなりました
その他色々参考になりました。ありがとうです
230デフォルトの名無しさん:05/03/18 00:16:05
>>224
よっしゃ、2つでがんばるよ。
最大で5つくらいまで必要かも知れんけど。
231デフォルトの名無しさん:05/03/18 00:17:06
>>226
> Broken Pipe が起きるってことは、こちらの返事を相手が
> 全部読まないうちに、相手側がコネクションを切断してし
> まったってこと。正常に通信してても頻繁に起きるような
> ら、どちらかがプロトコル処理を間違えてる可能性がある。

これ逆だよね。

>>229
half-closeだったってことだね。
232デフォルトの名無しさん:05/03/18 00:17:50
>>230
その場合は5つだよ。俺も経験から言って間違いない。
233デフォルトの名無しさん:05/03/18 01:18:32
>>231
逆? 合ってると思うけど…

それに half-close とは限らないよ。
1. クライアント側が shutdown(, SHUT_WR) で half-closeする。
2. サーバー側がクライアントになにか書く
3. クライアント側がその内容を読み込む
4. クライアント側が完全に close する。
5. サーバー側がクライアントになにか書く
とすると、5で初めて Broken Pipe になる。
つまり、half-close とは関係なく起きる。
234おしえて君:2005/03/22(火) 18:38:08
int型の二次元配列を送受信するUDPクライアント&サーバを
作りたいんだけど、なんかこれって簡単に実現できないのかな??
String型をbyte型配列に変換して送受信するようなサンプルはよくあるんだけど、
int型の二次元配列の場合、同じようなやり方だとできないよね??
なんか解決策ないでしょうか。
235デフォルトの名無しさん:2005/03/22(火) 18:52:05
よりにもよってUDPですか。
236& ◆hJb7GWrzxo :2005/03/22(火) 18:58:40
UDPってことには
とくに深いこだわりも意味もないんだけど、UDPって何か問題ありなの??

あと補足なんだけど
byte型配列にいれないと、ネット送受信できないって理解は正しいのかな??
int型二次元配列をbyte型の一次元配列に入れて、
そしてbyte型一次元配列からint型二次元配列を取り出すうまいアイデアが
あればいいのかなあとか思うんだけどこのアプローチはあってる??
237デフォルトの名無しさん:2005/03/22(火) 19:16:55
クソして寝たまえ。
238234&236:2005/03/22(火) 19:23:58
大事なことを言い忘れていた。
言語はJAVAです。アドバイスよろ
239デフォルトの名無しさん:2005/03/22(火) 19:26:17
だろうとおもった。
240デフォルトの名無しさん:2005/03/22(火) 19:29:27
CPU換装したら、ここで試せや↓
http://www5e.biglobe.ne.jp/~liquor/raytrace/
http://www5e.biglobe.ne.jp/~liquor/prime/

↑ってどうやってるんだろうね
241デフォルトの名無しさん:2005/03/22(火) 20:34:10
>>234
みんな教えてもらえなかったかわいそうな君へ。

■ UDPがどうしても必要なとこ以外はTCPを使え
■ その程度の質問してる奴にUDPが必須なアプリは作れない
■ TCPでパケットがくっついちゃうんですけどって質問はするな
242234&236:2005/03/22(火) 21:10:00
受信したDatagramPacketをpacketとすると
それをString型にもどすには
String data = new String(packet.getData(),0,packet.getLength());
となると思うんだけど、
これがint型の二次元配列の場合はどうすりゃいいのかさっぱり分からん。
packet.getData()がbyte型の配列を返すのかと思って、
packe.getData()[i]でiをインクリメントして表示させてみたりしたけどだめですたし。
どうしろってんだYO!!
243デフォルトの名無しさん:2005/03/22(火) 21:17:33
いまは、というか、古典的プロトコルは文字列化が大好きなので、
intの二次元配列を文字列にして、文字列を送信して、文字列を受信して、
intの二次元配列に復元しなさい。区切りに\nとか\tとか,でも挟んどけ
244デフォルトの名無しさん:2005/03/22(火) 21:44:10
エックスエムエルにすると便利ですよ
245デフォルトの名無しさん:2005/03/22(火) 21:46:15
UDPって何か問題ありなの??
246デフォルトの名無しさん:2005/03/22(火) 21:58:28
>>245
特にUDPが必要な場面じゃないなら、
余計な苦労はしない方がいいでしょ。
247デフォルトの名無しさん:2005/03/22(火) 23:49:48
会社のある案件で動いているプロキシあるのですが、このプロキシ
入り(クライアントが接続する部分)が socket、
出(接続先へのアクセス)が XTI というソースになってます。
このようなケースは良くあることなのでしょうか?
両方 socket で良いように思うのですが、あえてこのようにする意図が分かりません。

意味は有るのでしょうか?別に意味は無いのでしょうか?
どなたか、この意図を解説していただけないでしょうか?よろしくお願いします。
# ちなみに、今このプログラムの設計者は社内に在籍していませんです。
248デフォルトの名無しさん:2005/03/23(水) 02:33:25
>>247
実は片方は IP だけど、片方は IP じゃないとか?
さもなくば意味ない希ガス。

socket 使った方が便利な機能と、XTI にしかない機能が微妙に
あるので、それらに依存している場合は使い分ける意味がない
わけでもないが、そういうのは非常にマイナーな機能なので、
普通は要らない。
249デフォルトの名無しさん:2005/03/23(水) 09:01:30
XTI使ってるとこって存在するんだな
リチャード・スティーブンス本の中でのファンタジーだと思ってた
250デフォルトの名無しさん:2005/03/23(水) 09:11:03
そいえば昔のMacOSのネットワークはXTIベース。
251234&236:2005/03/23(水) 10:48:05
>>243

バイト配列は DataOutputStream と ByteArrayOutputStream を組み合わせて作り、受け取る側は ByteArrayInputStream と DataInputStream を利用して int 配列に戻す
という方法って、どうなの?どうやればうまくいく?
252デフォルトの名無しさん:2005/03/23(水) 10:59:12
1次元にすればいいじゃない♪
253デフォルトの名無しさん:2005/03/23(水) 11:00:24
つーかネットワークプログラミングと関係ない
254デフォルトの名無しさん:2005/03/23(水) 11:02:32
>>251
既にネットワークとは関係ない訳だが
255234&236:2005/03/23(水) 11:07:54
>>253
>>254

失礼しますた。他のスレへ移動します
256http://www.geocities.com/tokyufubai/:2005/03/23(水) 11:33:36
メモリ使用率は、値が大きくても使用状況が最適化されていれば
   特に問題はありません。具体的言えば、メモリ使用率が90%であっても
   その値が常に一定しているのであれば、リソースの競合も
   発生していないと言えます。
257デフォルトの名無しさん:2005/03/23(水) 18:53:44
javaを使ってIDというか会員制みたいなHPを作りたいんだけど・・ヤフー、Googleとかが
IDとパスワードいれたらログインできたりするプログラムなんですが、プログラム辞典なんかで
調べたんだけど載ってないし・・・だれかわかる人いますか?
258デフォルトの名無しさん:2005/03/23(水) 18:55:24
クソして寝たまえ。
259デフォルトの名無しさん:2005/03/23(水) 20:41:47
>>257
規模と予算を書いてソフト会社へ問い合わせたまえ
260デフォルトの名無しさん:2005/03/23(水) 20:44:40
>>257
生データをそのまま送るなら、別にこのスレに来なくても良いだろ。
261デフォルトの名無しさん:2005/03/23(水) 21:17:38
>>257
何で誰も言わないんだ。「ス・レ・違・い」だと。
262247:2005/03/23(水) 21:55:48
>>248
なるほど、ありがとうです。

両方 TCP です。
今日 再度ソース見ましたが、XTI の部分で特に変わった部分は何も無いようでした。
特に意味無しと思っときます。
# 当時の設計者が XTI を使ったのは単なる気まぐれか... 気になるなぁ (-_-?
263デフォルトの名無しさん:2005/03/23(水) 22:26:04
>>262
もしソレが 10〜15年くらい前の官庁関連の仕事なら、
OSI参照モデルに沿ったプロトコルスタックが採用されるという話などもあったので
その辺への対応を想定して片側にXTI を使っていてもおかしくはないと思います。

都庁の初代ネットワークなんかがそんなんだったような気がする。
264262:2005/03/24(木) 01:28:39
>>263
この案件自体は割と最近(ここ5年以内)の物です。
ですが、ソースの方はもっと古いらしく、遡ると某大手電器メーカから買った物が元になってるらしい、との話も聞きました(保身モード)。
もしそうだとすると、その説明が元ソースに対して当てはまる可能性も十分有り得そうに思えます。

というか、そう考えると結構納得出来ますね。ありがとうございます。
# 島のボスもその頃現役のはずだから、ひょっとするとその辺りの昔話が聞けるかも
265デフォルトの名無しさん:2005/03/24(木) 11:01:00
>>261
俺は一応>>260で遠まわしに言ったつもりだが・・・
266デフォルトの名無しさん:2005/03/24(木) 11:04:25
最近のYahooやGoogleは擬人化されてるんだね
267デフォルトの名無しさん:2005/03/24(木) 14:23:51
WinSock勉強してるんですけど
WinSock2.0プログラミングに
Win2000なら重複IOで完了ルーチンより完了ポート使った方がいいとかあったんですけど
そんなに違うものなんですか
268& ◆hJb7GWrzxo :2005/03/24(木) 14:35:29
http://sourcepost.sytes.net/sourceview.aspx?source_id=22650

こんなコードをコマンドプロンプト二つ立ち上げて二つ起動してみる
実験をしてるんですが、BindExceptionが出てしまいます。
二つのコードをそれぞれちょっとズレたポート番号に変えたりしてみたんですが
やっぱり無理みたいです・・・。
どっちを先に立ち上げても相手にメッセージがとどくようなUDPのコード
にしたかったんですけど・・・どうすりゃええんだい!?
269& ◆QWv3R1XL8M :2005/03/24(木) 15:03:34
↑どうやら凡ミスでした。変数名が本当はin2なのにinになってるところが
ありました。
で、一応期待通りに動くようになったっぽいんですが、
やはりBindExceptionはでてしまいます。これは何故でしょうか。
どちらもlocalhostに送受信しているからでしょうか?
別のコンピュータ同士で実験する場合、このエラーはでなくなるのでしょうか。
おしえてください
270デフォルトの名無しさん:2005/03/24(木) 15:05:01
>>268
大くの実装では、同じポート番号で受信するためのUDPソケットはlocal側の
IPアドレス毎に1つだけしか作れない。
(これがマルチキャストでも同様なんだから困ったもの・・・)

何か調停役のレイヤー(このレイヤーが作成管理する単一のソケットで全て受信し、
その後要求元それぞれに分配)を作るか、同時に動くコード同士でポート番号を変えるか
するしかない。

>二つのコードをそれぞれちょっとズレたポート番号に変えたりしてみたんですが
>やっぱり無理みたいです・・・。
これが無理ってことは無いと思う。コード見てないけど。
271& ◆QWv3R1XL8M :2005/03/24(木) 15:56:52
>>270

調停役のレイヤーなんてどうやって作るの
272デフォルトの名無しさん:2005/03/24(木) 16:19:53
>>271
C++ / Windows なら Outproc COM オブジェクトを作るのが最も簡単だと思う。
C# なら .NET Remoting でやるか、あるいはごく簡単に UDP から recv しつつ
接続してきた(複数の)クライアントに受信内容をコピーして渡すEXEを起動作って、
それを用いるとか。
273& ◆QWv3R1XL8M :2005/03/24(木) 16:40:38
>>272

どうやら僕には高度すぎて分からないことのようだ。
時間があるならもっと詳しくおしえてください
274デフォルトの名無しさん:2005/03/24(木) 17:42:31
例えば同じコードでマスタ・スレーブと動作を分けたこういう実装をすることもできる。

受信用のUDPをポート5555で作成

・作成に失敗⇒スレーブとして動作
⇒既に別インスタンスが動いているとして、適当なポートで受信用UDPソケットを作る
⇒そのソケットから5555に分配要求を送ってみる
⇒返事が来たらOK。そのポートで受信を続ける。

・作成に成功⇒マスタとして動作
⇒そのソケットで分配要求を受信したら、転送先リストに送り元のアドレス:ポートを追加
⇒その他のデータグラムを受信したら、受信データを処理。
 ついでに転送先リストにあるスレーブにも送っておいてあげる。

終了したスレーブへ転送しないようにするには、例えば転送先リストを揮発性(古いエントリは消える)に
しておいて、スレーブは一定間隔で分配要求を送るとかする。切断要求で消す式だと切断要求がlost
したときへの対応が面倒だから。

まだスレーブがいるのに、マスタ側が終了したいときの処理は面倒。ちょっとパケットを受信し損ねても
いいなら、スレーブのどれかをマスタに昇格させるような処理を行えばよい。
できるだけパケットを失いたくないなら、マスタは終了せずにUIだけ消して受信転送処理は続ける。
275デフォルトの名無しさん:2005/03/24(木) 17:45:57
>>274のマスタ側だけを取り出して、>>272のようにしても良い。

あとこういう実装だと自分が送ったものも受信してしまうので、パケットに載せる
ペイロードの中身に識別子などつけて適当に区別できるようにしたおく必要も
あるかもしれない。
276おしえて厨:2005/03/24(木) 20:31:42
http://sourcepost.sytes.net/sourceview.aspx?source_id=22650

とほぼ同じ内容のコードを、for文の中にぶちこんで100回ループさせて
みたんですが、最初の一回以外はぜんぶBindExceptionになります。
ループで何度も同じポート番号に送受信するのも、無理なんですか??
それとも僕のやり方に問題があるだけ??
main()全体をforで囲んで100回ループさせてるんですが
277デフォルトの名無しさん:2005/03/24(木) 20:38:11
>>276
うるせえな
1から基本を身に付けてこい
278& ◆hJb7GWrzxo :2005/03/24(木) 21:12:37
>>277

冷てえな
そういわずに教えてくれよ
279デフォルトの名無しさん:2005/03/24(木) 21:21:29
>>278
うるせえな
1から基本を身に付けてこい
280デフォルトの名無しさん:2005/03/24(木) 21:29:44
WINDOWS起動時にhttp://hoge.com/hoge.phpというURLにアクセスしたいのですが
ブラウザを使わずにやる方法や参考になるサイトありましたら教えてください。
 やりたいのはPC起動時の時間をPHPで保存したいだけです。ブラウザは使わずに
画面になにもでることなく終了したいです。
スタートアップにURLのリンクを張ればできるのですが、ブラウザが起動してしまいますので。。
281デフォルトの名無しさん:2005/03/24(木) 21:33:55
>>280
その程度ならソフト作成依頼スレにでも書けば?
言語問わずなら5分もあれば十分に作れる

俺は作らんけどな
282& ◆QWv3R1XL8M :2005/03/24(木) 21:41:23
>>277

socketをクローズしてないから問題なんだな?
おいそれぐらいおしえてくれよ
283デフォルトの名無しさん:2005/03/24(木) 21:43:21
.NETなら恐ろしく簡単にできたはず。
284デフォルトの名無しさん:2005/03/24(木) 21:45:27
>>282
試せばいいじゃん。聞くより早い。

285280:2005/03/24(木) 21:52:06
WSHで実現可能でしょうか?
WINDOWS上で動いて、notepadなどで作成できるものがいいのですが。

>>281
URL教えてください。
286デフォルトの名無しさん:2005/03/24(木) 21:57:10
>>285
http://pc8.2ch.net/test/read.cgi/tech/1046576456/
手取り足取り教えないといけないのかよ
餓鬼か?
287280:2005/03/24(木) 22:11:46
>>286
お手数かけました。ありがとうございます。いってみます。
288おしえて厨:2005/03/24(木) 22:49:53
>>284

おいsocket.close()したらBindExceptionでなくなったぞ。
でも100回ループする完了する前に途中でフリーズする。
なぜだ。
何回目でストップするかはランダム
289デフォルトの名無しさん:2005/03/25(金) 01:12:41
recvfrom()ってナル文字まで受信するみたいですけど。
これは、指定したポインタにnull文字を含む文字列を入れるのでしょうか?
それとも、null文字までを入れて、null文字は含まないのでしょうか?

どうも、フフフフフが発生してまして・・・。
290デフォルトの名無しさん:2005/03/25(金) 01:18:06
>>289
> ナル文字まで受信するみたい

みたいってなんだよ
291デフォルトの名無しさん:2005/03/25(金) 01:19:34
ネットワークプログラミングじゃなくて、
初歩のプログラミングの方を勉強した方がいいような奴が
一気に湧いてきたな。春のせい?
292デフォルトの名無しさん:2005/03/25(金) 01:23:41
フフフフフ
293デフォルトの名無しさん:2005/03/25(金) 02:02:59
ウフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
294デフォルトの名無しさん:2005/03/25(金) 07:40:59
>>289
recv、recvfromはnull文字かどうかなんて判定しない
それに受信はバイナリだからnull文字=’\0‘=0x00(普通なら)ということ
受信したサイズは戻り値を確認しる

フフフフフフフはVCがデバックの時
初期化されてないメモリを埋める時に使ってる
295デフォルトの名無しさん:2005/03/25(金) 07:47:32
いつも思うことだけど、日本のこの業界は本格的にダメだな。
296デフォルトの名無しさん:2005/03/25(金) 07:49:37
猫だとわかるネットワークプログラミングってサイトがないからだよ
297デフォルトの名無しさん:2005/03/25(金) 08:10:23
すべてBSDがクソなせい
298デフォルトの名無しさん:2005/03/25(金) 08:22:52
むしろ Windows のインスタント至上主義のせいだと思うな。
299デフォルトの名無しさん:2005/03/25(金) 08:30:35
何十年前のOSのシステムコールなんかが生き残ってる方が問題。
300デフォルトの名無しさん:2005/03/25(金) 08:31:13
kqueueとかepollとかじゃないかぎり全部Javaにすりゃいいよ
301デフォルトの名無しさん:2005/03/25(金) 08:47:01
UNIXは無計画にクソに接ぎ木してさらにクソ度を高める事を繰り返したクソOSだからな。
そろそろ洗い流してすっきり忘れるべきだ。
302デフォルトの名無しさん:2005/03/25(金) 09:01:09
>>301
例えばどんなだったら良い感じか、代案キボン。
あくまで例えばで。
303301じゃないけど:2005/03/25(金) 09:11:29
//bindとかetc..
SETSOCK(&clsock, onaccept, onread, onclose)
addsock(&svsock,&clsock);
//あとはコールバック
304デフォルトの名無しさん:2005/03/25(金) 09:18:12
MFCでもつかっとけ。
305& ◆hJb7GWrzxo :2005/03/25(金) 11:20:39
>>288

288で起きている問題はある種のデッドロックでしょうか。
それとも別の問題が原因だけど見かけ上そうみえるだけなんでしょうか。
306おしえて厨:2005/03/25(金) 14:27:55
この二つのソースをみてください。
http://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ってもんですか。
307デフォルトの名無しさん:2005/03/25(金) 14:30:34
100回全部届くとは限らんのです。それがUDPクオリティ。
308デフォルトの名無しさん:2005/03/25(金) 14:35:31
UDPは到達保証がない。LAN内であっても落ちる。
同一PCならなおさら落ちてもおかしくない。
309デフォルトの名無しさん:2005/03/25(金) 14:36:03
DNS以外にUDPでおなじみの鯖ってある?
310デフォルトの名無しさん:2005/03/25(金) 14:45:38
RIP とか SNMP とか TFTP とか
311デフォルトの名無しさん:2005/03/25(金) 14:51:55
snmp, ntp, bootp(dhcp), ping, syslog
312デフォルトの名無しさん:2005/03/25(金) 15:10:43
ping は ICMP。
313デフォルトの名無しさん:2005/03/25(金) 15:14:11
>>311
pingはICMP
314& ◆hJb7GWrzxo :2005/03/25(金) 15:18:31
UDPの場合はバイト配列におしこめなきゃいけないってことだったが、
TCPの場合はバイト配列じゃなくても送受信できるんかね?
int型の二次元配列をバイト配列に変換するようなことしなくても送れますか
315デフォルトの名無しさん:2005/03/25(金) 15:23:22
>>314
これはバイト配列じゃない!って認めなければできるんじゃない?
316デフォルトの名無しさん:2005/03/25(金) 15:27:55
>>314
sendmsg/recvmsg(またはwritev/readv)のことか?
317& ◆QWv3R1XL8M :2005/03/25(金) 15:52:18
TCPでint型の二次元配列を相手に送信するとしたらどういう関数を使いますか
(java&windows XPの環境で)
318デフォルトの名無しさん:2005/03/25(金) 16:00:29
bb.put(n.length);
bb.put(n[0].length);
for ( //略
319デフォルトの名無しさん: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) */

こんな感じので良いの?
320デフォルトの名無しさん:2005/03/25(金) 16:24:53
>>319
くぁwせdrftgyふじこlp;@:

汚すぎ
無理して#define使わんで関数使えよ馬鹿
321デフォルトの名無しさん:2005/03/25(金) 17:06:37
>>319
式にならないマクロは大文字で書いた方が良いと思うけど。
do {〜}while(0)使うとか。
322デフォルトの名無しさん:2005/03/25(金) 17:10:54
>>319
なんだよ return -1 て。
323デフォルトの名無しさん:2005/03/25(金) 19:26:50
さらに言うと、
recvfrom() の返り値はチェックしてないし、
select() が EINTR を返した場合のケアもないし、
_で始まる名前はシステム側に予約されているから、
アプリケーションが勝手に使うのは規約違反だし。
なぜたかが3行のプログラムで、これだけ(ry
324デフォルトの名無しさん:2005/03/25(金) 19:48:40
>select() が EINTR を返した場合のケアもないし
これ書いてない本多いね。

『Winsock2.0プログラミング』(ソフトバンク)
には
selectの戻り値の説明に
>指定の条件を満たす記述子の総数、0(timeoutパラメータ値が満了した場合)、またはSOCKET_ERROR。
と書かれてる。
そのまま鵜呑みにすると、>>319のように0>の判定だけで済まそうとする人続出の悪寒

最近は入門書が、わかってない人が書いてるのが困り物。
325デフォルトの名無しさん:2005/03/25(金) 19:51:39
>>323
自分用に作られたラッパーなんてこんなもんでしょ。
汎用性を重視するならともかく、限られた状況であれば、戻り値も想定の範囲内だけで十分。
326デフォルトの名無しさん:2005/03/25(金) 19:54:00
そうやって馬鹿を量産するつもりか
327デフォルトの名無しさん:2005/03/25(金) 19:54:09
>>323
おいおい、お前も突っ込みどころ満載だな
328デフォルトの名無しさん:2005/03/25(金) 19:55:27
プログラム板の鉄則は、3行以上の長文を書くと殆どの確立で穴を掘り突っ込まれる。
329デフォルトの名無しさん:2005/03/25(金) 19:56:36
限定的な使い方しかできないなら、
システムコールや標準ライブラリに入れろつーのはおかしな話だ。
330デフォルトの名無しさん:2005/03/25(金) 19:57:42
っていうか汎用性の無いコードならチラシの裏に書いとけ
331デフォルトの名無しさん:2005/03/25(金) 20:08:24
>>324
わかってないのはおまえ。
もはやWSAEINTRが上がる事なんてない。
332デフォルトの名無しさん:2005/03/25(金) 20:13:12
>>331
>>324が例示している「Winsock 2.0」ならその通りだよね・・・
Unixの類ではsignal受けたときなどにEINTRが帰るのかな。
333デフォルトの名無しさん:2005/03/25(金) 20:23:46
>>332
UNIX上では、signal処理の設定の状況によってはEINTRが返る。
SIG_IGNやSA_RESTARTを指定してた場合には返らないけど。
334デフォルトの名無しさん:2005/03/25(金) 20:52:40
UNIXといっても、しっかりとした商用UNIXなら、の話だけどね。
335デフォルトの名無しさん:2005/03/25(金) 20:53:49
>>334
嘘つけ。いまどきEINTRが返らないUNIX系OSなんてないよ。
あるなら例を挙げてみろ。
336デフォルトの名無しさん:2005/03/25(金) 20:54:19
>>334
商用でないUNIXとは?
337デフォルトの名無しさん:2005/03/26(土) 00:52:46
最近の Linux だと、>>319 の recvfrom() でブロックする可能性
がある (ブロックさせないためには、socket の non-blocking
モードにして、errno == EAGAIN をチェックする必要がある) って
話が、akr さんの日記に出てたね。
338デフォルトの名無しさん:2005/03/26(土) 02:17:43
>>328
>プログラム板の鉄則は、3行以上の長文を書くと殆どの確立で穴を掘り突っ込まれる。

今さらながら、このたった1行の日本語にもつっこみどころがある件について。
339デフォルトの名無しさん:2005/03/26(土) 05:23:03
なんだこの粘着厨は
340デフォルトの名無しさん:2005/03/26(土) 06:29:07
こだわり職人だろ(w
341デフォルトの名無しさん:2005/03/26(土) 06:31:17
どっちもどっちだな
342デフォルトの名無しさん:2005/03/26(土) 06:37:18
selectってなんか無駄が多い気がしてきた。
Winでもkqueue試してみたいよ・・・
343デフォルトの名無しさん:2005/03/26(土) 06:57:40
お前には無駄
344デフォルトの名無しさん:2005/03/26(土) 06:58:37
より低脳な>>343に煽られてもねぇ・・・
345デフォルトの名無しさん:2005/03/26(土) 07:27:05
WINには、非同期ソケットにオーバーラップI/O、EventSelect、
NTならIO完了ポートがあるじゃあないか。
346デフォルトの名無しさん:2005/03/26(土) 07:57:39
試してみるべ
347デフォルトの名無しさん:2005/03/26(土) 13:42:08
ノンブロッキングについて教えて下さい。
現在selectの直後にrecvをループで回す関数を用意して、
指定バイト数分のデータを受信するような作りにしています。
この場合ブロッキングにしてると、
recvしている関数から抜けられなくなってしまいそうなので、
ノンブロッキングにすることにしました。
(最初の数バイトはソケットに届いたが、
 それ以降のデータが届かなかった場合などを懸念しています)
ノンブロッキングにした場合はEWOULDBLOCKの判定をしなければいけないと思いますが、
EWOULDBLOCKなら無条件にrecvをリトライするような作りにしてしまうと、
ブロッキングの時と同じくrecvしてる関数から抜けられなくなってしまいますよね。
そこで一定回数リトライしてもEWOULDBLOCKが返ってくる場合は
エラーにするという処理にしようと思うのですが、
考え方としてあってますでしょうか?

いろいろ調べてみたのですが、具体的な方法が書いてあるところが見つからなくて。
EWOULDBLOCKとはどういう状態なのかとか、
ノンブロッキングの時にはEWOULDBLOCKを考慮する必要があるとかが
書いてあるところは腐るほど見つかったんですが。
348347:2005/03/26(土) 13:43:16
すいません。sage忘れました。
349デフォルトの名無しさん:2005/03/26(土) 14:12:49
いや、質問はsageるな。
350デフォルトの名無しさん:2005/03/26(土) 14:40:58
>>347
対象のソケットをselect()して読める時だけrecv()する。
351347:2005/03/26(土) 15:26:53
>>350
なるほど。
毎回recvの前にselectしてデータの到着を確認しておけば、
recvではまることはなくなりますね。

ん??そうするとわざわざノンブロッキングにしないでも
ブロッキングのままでOKということですよね?

ノンブロッキングがなんのためにあるのかがわからなくなってきた・・・
352デフォルトの名無しさん:2005/03/26(土) 16:01:02
select()したあと、読みたいだけ読めるか、
EWOULDBLOCKが返るか、失敗するまでrecv()しまくればいいだろ。
353デフォルトの名無しさん:2005/03/26(土) 16:29:35
書き込み可能と読み込み可能を
一度にひとつのselect文でやろうとすると
354デフォルトの名無しさん:2005/03/26(土) 16:53:19
Winsockならこれで問題ないの?

inline 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) );

}
355デフォルトの名無しさん:2005/03/26(土) 17:02:05
しっこして寝たまえ。
356デフォルトの名無しさん:2005/03/26(土) 17:11:46
>>354
良いと思う。
っていうか、全く同じコードが某入門書に書いてるなw
357デフォルトの名無しさん:2005/03/26(土) 17:17:35
良くねえだろ。
select() の最初の引数はホントは int だし。(たまたま平気としても)
sizeof(form) も sizeof(buf) も 4 にしかならねーぞ。
358デフォルトの名無しさん:2005/03/26(土) 17:18:39
form じゃなくて from ね...orz
359デフォルトの名無しさん:2005/03/26(土) 17:28:05
select()の1つめの引数は、無視される だから問題ないかと
無理だったら、それは無視されてるわけじゃないわけだから、Winsockの規格違い
360デフォルトの名無しさん:2005/03/26(土) 17:34:38
int のところに NULL はないだろうという話。
Winsock でも void* とかではなくて int だよ。無視されるとしてもね。
361デフォルトの名無しさん:2005/03/26(土) 17:36:57
ごめん、俺もいつもNULL突っ込んでた。
っていうか、何入れれば良いんだ?
他に手ごろなのが思いつかん。
362デフォルトの名無しさん:2005/03/26(土) 17:56:50
0でいいんじゃないか?
363デフォルトの名無しさん:2005/03/26(土) 18:00:30
nullpo
364デフォルトの名無しさん:2005/03/26(土) 18:01:18
小規模板へいそげ!
陸、○、空オンラインっていうゲーム
おもしろそうだ!

プログラマ募集してるんだって
365デフォルトの名無しさん:2005/03/26(土) 18:02:45
小規模板へいそげ!
陸、○、空オンラインっていうゲーム
おもしろそうだ!

プログラマ募集してるんだって
366デフォルトの名無しさん:2005/03/26(土) 18:03:38
この宣伝ちょくちょく見かけるな
如何にも何も作れなさそうな主催と
そのウォッチャーのスレだった
367デフォルトの名無しさん:2005/03/26(土) 18:37:55
>>354
どうしてもサイズ指定を省略したいってなら、#defineでかいたら?
関数にすると、sizeof()は4しか返さないぞ。
368354:2005/03/26(土) 18:39:06
あれ?inline使ったら置き換えになるから大丈夫だと思ってた
スマソ
369デフォルトの名無しさん:2005/03/26(土) 18:40:34
藻前はネットワーク以前にCなりC++なりをちゃんと使えるようになりたまへ。
370デフォルトの名無しさん:2005/03/26(土) 18:40:36
>>368
おいおい…
inlineと#defineを一緒にするなよ
371デフォルトの名無しさん:2005/03/26(土) 18:41:23
>>369
inlineはC++からだから、恐らくCしかやった事無いのにちょっと頑張ってみました ってタイプと俺は見たw
372デフォルトの名無しさん:2005/03/26(土) 18:41:26
>>366
それどころか、主催の奴のサイトからリンクたどっていったら、
他のMMOを作ろうコミュニティからはじき出された鼻つまみ者だったよ。
373デフォルトの名無しさん:2005/03/26(土) 19:23:44
>>371
Cでも使うよ。ときどき。
374デフォルトの名無しさん:2005/03/27(日) 01:36:35
質問ですが WSAEventSelect を使うと、WSAEventSelect のパラメータに
かかわらず、すべての関数が非ブロッキングになるのでしょうか?
例えば、connect だけブロックするという使い方は出来ないのでしょうか?
375デフォルトの名無しさん:2005/03/27(日) 17:46:48
>>371
C99なら普通に使えるけどな。
376& ◆D3ra0B2LiQ :2005/03/28(月) 12:09:30
ちょっと教えてください
http://www.hellohiro.com/socket.htm

ここのサンプルコードをみると、バイト配列に変換してなくてもデータを
サーバに送信できるみたいなんですが、
こういうことはString型以外のデータ型でもできるんですか?
いちいちバイトに変換しないと送受信できないのかと思ってたので気になるんですが
377デフォルトの名無しさん:2005/03/28(月) 12:25:21
またお前か
readLineはバイト配列を改行コード又は\0まで読み込んで
末尾に\0に据えて文字列として一行分取得するメソッドだ。
String以外のデータもじゃなくて、Stringもバイト配列でやってんだよカス
378デフォルトの名無しさん:2005/03/28(月) 12:53:40
>>376
Javaの仕様上の疑問は、”殆ど”の物がSDK添付のソースコードを参照することで解決する。
疑問に思ったら、人がああやってるのはどうして?の前にソース読む位の気合持てよ。
379デフォルトの名無しさん:2005/03/28(月) 12:55:46
&は出没当初から今までやたらバイト配列を目の敵にしてるな
380デフォルトの名無しさん:2005/03/28(月) 12:59:04
質問です。
アライメントに気をつけ、きちんと4バイトで割り切れる構造体を作ったとして
それをsend()で送った場合、正常に送信先に整列されたまま届かない可能性ってありますか?
その場合、どのような原因が考えられるのでしょうか?

よろしくお願いします。
381デフォルトの名無しさん:2005/03/28(月) 13:05:09
ネットワークで起こりえないことは存在しないんじゃね?
ただ、その確率が低いだけで
382デフォルトの名無しさん:2005/03/28(月) 13:26:03
>>380
電線の中を信号が通るときは4バイト単位もくそもないから
それを実現するのはアプリケーション層で
もしあれならきちんと受信するよう管理するラッパーを
つくつくつくればいいんじゃない?
383デフォルトの名無しさん:2005/03/28(月) 13:26:29
あぷろーだーで、Java Servletレベルで帯域制限って
可能なのでしょうか?
httpdはApache2です。
384デフォルトの名無しさん:2005/03/28(月) 17:08:55
>>383
スレ違い。
385383:2005/03/28(月) 17:51:45
>>384
sry. cya all m8s
386デフォルトの名無しさん:2005/03/29(火) 10:23:16
wsock32.dll からエクスポートされている関数で序数が1000以上のもの(例えばdn_expand等)は
winsock.hに含まれていないものが多いのですが、何のためにあるのでしょうか?
387おしえて厨:2005/03/29(火) 13:01:00
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=22714

TCPでint型二次元配列を送受信しようと
ちみたちのアドバイスやサンプルやドキュメント調べながらこんなコードを書いてみたけど
エコーが返ってきません。
どこか間違ってるところある??
388デフォルトの名無しさん:2005/03/29(火) 13:54:40
コピペしたんだかなんだか知らんけど、
インデントもそろってなくて自分でデバッグも出来ない様な、
きたねぇソース書くな。

クライアントコード側の37行目と39行目がヒントだ。
あとは自分でどうにかしろ。ヒント通りにデバッグすりゃ動く。こっちで確認した。

こんなのネットワークプログラミングの質問じゃねぇぞ。
いいかげんにしろ。糞ガキ。
389& ◆hJb7GWrzxo :2005/03/29(火) 14:09:56
readとwriteの順番を逆にすれば動きますた。
thx。
390デフォルトの名無しさん:2005/03/29(火) 14:25:18
>>386
UNIX-Socketとの互換性維持じゃないのかな。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/resolver.3.html
391デフォルトの名無しさん:2005/03/29(火) 17:13:34
>>388
> コピペしたんだかなんだか知らんけど、
ココ(↓)のソースそのまんまだよ。
http://www.hellohiro.com/socket.htm
きっとコイツは全く何にもこれっぽっちも自分では考えちゃいない。
無視するが吉。
392デフォルトの名無しさん:2005/03/29(火) 17:18:06
バイト配列を愛さない奴は無視
393デフォルトの名無しさん:2005/03/31(木) 12:15:29
ブロッキングソケットと非ブロッキングソケットを
切り替えながら使うってのはOKでしょうか?
何か問題あるのでしょうか?
394デフォルトの名無しさん:2005/03/31(木) 19:12:03
全然問題ないよ。
ブロックするしないにしか関係しないから。
395デフォルトの名無しさん:2005/03/31(木) 22:24:59
>>394
そうですか、ありがとうございます。
心配しているのは、タイミングによって
通知(イベント)が受けられない事はないか?です。
このような使い方をしている人はいるのでしょうか?
396デフォルトの名無しさん:2005/03/31(木) 23:03:12
>>395
プログラマをはじめて幾年月立つが、そんな使い方は初めて聞く
397デフォルトの名無しさん:2005/03/31(木) 23:24:48
ソケットの使い方ってどうせ数えるぐらいのパターンしかないだろうから、
はじめからそういうフレームワーク用意して欲しいね。
398デフォルトの名無しさん:2005/04/01(金) 00:03:06
おまえがつくれ。
399デフォルトの名無しさん:2005/04/01(金) 00:12:34
オレ専用フレームワーク、略してオレフレ
だったらいくつか用意してある。
400デフォルトの名無しさん:2005/04/03(日) 19:58:27
フレームワークなんか無くなって性能は100%発揮できます
偉い人には分からんのです
401デフォルトの名無しさん:2005/04/03(日) 20:52:18
なんのひねりもなく面白くない
402デフォルトの名無しさん:2005/04/03(日) 23:42:16
フレームワークとはいつでも会えるから
403デフォルトの名無しさん:2005/04/05(火) 02:09:53
いま winsock を生でいじってサーバーを作ってるんですが、うまくいきません。
サーバー側は WSAAsyncSelect で FD_ACCEPT を登録して、
クライアント側は同期で connect しています。
ローカルでのテストではうまく FD_ACCEPT が呼ばれるのですが、
自分のポートを開いて、グローバルテストをしたときに
なぜか FD_ACCEPT が呼ばれるまでの間に遅延があります。
クライアント側の connect は瞬時に終わっているので、接続は確立していると思うのですが。
グローバルで動かした場合にこのような事態にあることってあるんでしょうか?
404デフォルトの名無しさん:2005/04/05(火) 02:32:54
>>403
> 自分のポートを開いて、グローバルテストをしたときに

ってなんやねん?
405デフォルトの名無しさん:2005/04/05(火) 02:49:21
ポートを開いて(たとえば3000)、自分のグローバル IP (たとえば 100.100.100.100)を取得して、それに接続するということです。
この場合なら 100.100.100.100:3000 に接続。
406デフォルトの名無しさん:2005/04/05(火) 03:05:45
それはローカルのテストなんじゃないの?
407デフォルトの名無しさん:2005/04/05(火) 03:32:31
えっと、要するにローカルからローカルに接続するんですはなくて、WAN にして接続するということです。
さきほど、なんかいか同じことを繰り返していたら、うまくいきました。
しかし、すこし時間がたつと同様の現象になってしまいました。
もしかしたらプロバイダー側の制限なのかもしれません(DIONです)。
ポート番号を変えていろいろと試してみます。
408デフォルトの名無しさん:2005/04/05(火) 07:07:09
おそらくルーターを使っているのだと思うけど、ローカルからグローバルに接続するのは無理じゃなかったっけ?
可能な場合ってルーターが誤魔化しているだけで実際はWANにデータは出てないと思った。
409デフォルトの名無しさん:2005/04/05(火) 09:37:56
>>407
何言ってんだかよくわかんないんだけど、

> えっと、要するにローカルからローカルに接続するんですはなくて、

これはループバックアドレス(127.0.0.1)、あるいは、
自分のインターフェースに付けられたアドレスを接続先アドレスに、

> WAN にして接続するということです。

は、自分のインターフェースに付けられたアドレスじゃなくて、
ルータの外側に付けられたアドレス(つまりNAT環境)を接続先アドレスにしてるって事?

燃しそうなら正直ルータ次第だな。
>>3のwindumpでパケットキャプチャしてみてちょ。
410デフォルトの名無しさん:2005/04/05(火) 11:48:37
>は、自分のインターフェースに付けられたアドレスじゃなくて、
>ルータの外側に付けられたアドレス(つまりNAT環境)を接続先アドレスにしてるって事?
そうです。

ポートを 21 (FTPと誤解させるため)にしてみたら、うまくいきました。
なにやらプロバイダの制限くさいです。

みなさんどうもありがとうございました。
411デフォルトの名無しさん:2005/04/06(水) 00:11:10
listen してるポートを何らかの方法で外部から落とす方法ってありますか?
提供したプログラムのlistenポートが落ちてクライアントが接続できなくなる事があって困ってます。
テスト環境を作りたくて考えてますが思いつきません。
OSはMSが出してるWindows2000ってヤシです。
412デフォルトの名無しさん:2005/04/06(水) 00:19:44
クライアント側のクローズに問題があって
listenキューの数を越えてるって事は無いの?
413デフォルトの名無しさん:2005/04/06(水) 00:26:03
>>412
netstat -an | grep <portnum> とすると LISTENING がありません。
キューの限界超えると、そうなりますか?その辺は勉強不足です。
すんません。
414デフォルトの名無しさん:2005/04/06(水) 00:26:10
>>411
制御用のポート別に立てておけばいいだろ
415デフォルトの名無しさん:2005/04/06(水) 00:44:06
>>413
うん。接続待ち状態でブロックか、タイムアウトで接続できないか。
ちなみに、そのアプリの正規の切断手順では
1. クライアント側から切断
2. サーバー側から切断
3. 状況に応じてどちらからかは分からない。
416415:2005/04/06(水) 00:46:49
途中で切れたorz
切断手順は1〜3のどれかな?

>>414
切断時のTIME_WAITかなんかで、ソケットが残ってる状態で
接続を繰り返すような作りになってた場合、コントロールポート用意しても
おなじ事になる恐れがあると思う。
417デフォルトの名無しさん:2005/04/06(水) 00:58:16
>>415
正規の切断手段はクライアントからの切断ですが、アプリレベルのシーケンス異常が
起こった場合はどちらからでも切る恐れがあります。
ちなみに、切れたときの状況はつかめて無いのですが、繋がらないと連絡を受けてか
ら netstat -an の状態を見ると、そのポート宛では LISTENING も TIME_WAIT も
とにかくそのポートに関係あるものは何も残ってません。

listen のキューがあふれたときサーバの listen ポートが閉じられるのであれば、
TIME_WAIT を沢山作ったり接続を山ほど行ったりすれば現象が再現するのでしょうか?
同じライブラリ(自作)を使って、今まで遭遇した事の無い現象なので、途方に暮れ
てます。
418デフォルトの名無しさん:2005/04/06(水) 01:19:01
>>417

>>うん。接続待ち状態でブロックか、タイムアウトで接続できないか。
ごめん。コレ間違い。
キューが一杯の場合
クライアント側にECONNREFUSED(10061)が返って、エラーで接続できない。
クライアント側のエラー値で確認してみたらどうかな?

>>TIME_WAIT を沢山作ったり接続を山ほど行ったりすれば現象が再現するのでしょうか?
listen()に指定したキュー数を超えた接続をすれば、上記の状態になる。
419デフォルトの名無しさん:2005/04/06(水) 07:00:37
>>418
ですよね。。。キューを超えても拒否られるだけでlistenポートは閉じませんよねぇ。
だめだ。。。お手上げ・・・|||| _| ̄|○ ||||
せめて現象を再現出来れば手の施しようもあるんだけど・・・
気になるのが、ウィルスバスターなんかについてる、ポート閉じる機能。あれが動いたら
listenしてるポート閉じるとか、そんな現象聞いたことありませんか?そのパソコンにも
VBコーポレートエディションとかいうヤシ入ってるらしくて・・・
それなら頑張ってPCとソフト揃えれば出来るかも。
今、テスト出来る環境が無いので調査出来ないんですが・・・
ZoneAlarm で似たようなことしてみようと思ったけど、昔と感じが変わってて、戸惑った
あげく、出来なかった・・・漏れ、餓鬼・・・・|||| _ト ̄|○ ||||
420デフォルトの名無しさん:2005/04/06(水) 10:40:24
単にサーバ側がバグってて異常終了してるって落ちじゃないの?
てゆうか、サーバ側を直接デバッグってできんの?
421デフォルトの名無しさん:2005/04/06(水) 11:12:03
snifferについてどうにも上手くいかず困っているのですが、
ヒント等頂けないでしょうか?

内容ですが、win2k&C#で SocketのRAW・RCVALLを使ってglobal/privateIPは
スニファ出来たんですが[127.0.0.1]のIPを指定した場合、IOControlで
SocketException例外落ちで上手く動いてくれないんです。

検索してみたんですが参考にしたソースと同じコードだったり、他のソフトとかも
IP指定方法がアダプタやソフト側で取得したIPから選択などloopback側を
見れるソフトも方法もみつかりませんでした。。。

C/C++/C#/VBでも何でもいいのでなんらかしらの情報/情報先を
教えてもらえないでしょうか。。。
どうかよろしくお願いします。
422デフォルトの名無しさん:2005/04/06(水) 16:28:56
>>411
俺には何がいいたいんだかさっぱりなんだが、
みんなよくわかるな。誰か翻訳して。
423デフォルトの名無しさん:2005/04/06(水) 16:31:06
>>420
サーバ側のプロセスは終了してません。これは保証できます。
プロセスは終わってないけど、listen が異常終了している恐れはあります。
でも、なぜそのような現象が起こるかが知りたいのです。
同じモジュールを使用していて今までそのような現象に遭遇したことが無いので、
ローカル環境でデバックしたいと思ってます。そのために現象をローカル環境で
再現したいと思ってます。

それと、残念ながら、現地のサーバは手軽に触れるところには無いのです_| ̄|○
424デフォルトの名無しさん:2005/04/06(水) 16:39:23
>>423
> listen が異常終了している恐れはあります。

調べろ!この糞が!

> それと、残念ながら、現地のサーバは手軽に触れるところには無いのです_| ̄|○

言い訳はいいから。
425デフォルトの名無しさん:2005/04/06(水) 16:45:40
ただのバグってことか。
426デフォルトの名無しさん:2005/04/06(水) 17:03:43
>>424
う〜ん。。。異常終了してるかどうかはこの際関係なくて、異常終了させることが
出来るかどうかをしりたいんですね。ってか、そういう事が起こること自体不思議
で、どんな条件があればそうなるのか知ってる人がいれば、と思ったんですが。
ここの住人は賢い人が多そうなので・・・

それと、言い訳ではなく、手軽に触れられないから、同じ状態をローカルで構築し
たいんですね。それで現象を再現できて、その対策を講じることが出来れば、それ
で良し、です。

>>425
かもしれません。し、そうじゃないかもしれないです。
少なくとも listen ポートが落ちた後再立ち上げ処理を入れてないのはバグです。
それは直します。が、再立ち上げ処理を入れたところで、何かの問題で立ち上がら
ない状態になるかもしれません。その状態が再現できればテストがローカルで出来、
先方に説明も出来そうです。

が、そろそろ S/N 比が落ちる頃なんでしょうかね。
ここでの情報収集は限界かな?

サーバにデバッグ環境突っ込んで常に監視出来れば手っ取り早いんですけどね。
そういう環境でしか開発したことが無い人が羨ましいわ(w
427デフォルトの名無しさん:2005/04/06(水) 17:14:13
>>426
オマエは事務員にでもなったほうがいい。
428デフォルトの名無しさん:2005/04/06(水) 17:23:04
>>426
listen()を落とす方法を知りたがる気持ちは分からなくも無いけど、
ここで、君が知らなければならないことはそう言うことではないはず。

今まで問題が無かったモジュールを使っていて初の現象とも言っているが、
今まで運が良かったと言う可能性は0ではないだろうし。

どうも、話を聞いている分には、サーバーは自社開発じゃなくて以前から導入済み、
クライアントは自社開発って事なんだと思うけど、
(サーバーも自社開発なら、ローカルでの環境構築は通信部分に限ればは苦ではないはず。)

客側からの情報で、最低限どの程度の時刻に落ちるのか等の情報は、得てるでしょ。
そうすれば、その時間帯に起こるトランザクションも見えてくるんじゃないかな。
(客によっては、トランザクションのサンプルも取らせてくれるだろう。)

まず、エラーの再現ではなく状況の再現が先なんじゃないかなぁ。
デバッグするにしても手順と考え方がちとずれてるような気がする。

>>サーバにデバッグ環境突っ込んで常に監視出来れば手っ取り早いんですけどね。
>>そういう環境でしか開発したことが無い人が羨ましいわ(w

君のような環境でデバッグするなんて事はいくらでもやったが、
順を追っていって解決できなかった案件は今の所ないけどなぁ。
429デフォルトの名無しさん:2005/04/06(水) 17:24:36
>>427
了解。事務員になってオマエをクビにします。
430デフォルトの名無しさん:2005/04/06(水) 17:30:25
>>426
再現させようにも、お前は状況すら把握してないだろ。氏ね!
431デフォルトの名無しさん:2005/04/06(水) 17:30:48
>>428
丁寧な説明ありがとー。
サーバもクライアントも自作です。
私も今まで順を追って作業して解決しなかった事は無いです。
今回は「なぜ、それが起こるのか」「どう解決したのか」を客先に報告する必要が
あります。そのため、「なぜ、それが起こるのか」を突き止めたいのです。

そのために状況の再現をしたいのですが、ローカルではいくら同じような環境にし
ても現象が発生しないのです。
唯一の手がかりが「何らかのタイミングで listen ポートが閉じられている」と
いう事実のみです。
これはプログラムのログから判断してます。全接続が一気に切られて、それ以降、
接続のログが残りません。プロセスは動きつづけています。

そこで、なんとかして listen ポートを閉じてみたいと思っています。
それが出来たら、「オタクらうちが入れたサーバに何かしてない?」と問い詰めて
責任範囲を限定していきたいと思っています。

説明下手ですんません。
432デフォルトの名無しさん:2005/04/06(水) 17:35:36
再現試験のためソース改変せずにlistenを落とす攻撃方法を知りたいと。
433デフォルトの名無しさん:2005/04/06(水) 17:39:55
そんなもん幾らでもあって話にならん。
サーバの状況を調べろ。
434デフォルトの名無しさん:2005/04/06(水) 17:42:00
プログラマじゃないだろ。
listen()とaccept()の区別すらついてない奴は。
TCP接続のACCEPT状態うんぬんなんてまるで理解してないよ。
放置しる
435デフォルトの名無しさん:2005/04/06(水) 17:43:59
>>431
ごめん。既にスレ違いの方向に流れてるから、俺のレスはこれで最後だと思ってくださいな。

客先への詳細報告が必要なのは当然でしょう。

ローカルで再現しないってのを、もっと早く聞きたかったなぁ。今始めて聞いたよ。。

あと全接続が切られるっていうのは、
その瞬間においてサーバーから切断なのか、クライアントから切断なのかが分からないし。
下手すりゃ、物理的な切断の可能性は?って事もわからない。
(例えば無線LAN使用時など)

あと、全体的に受け取れる感想なんだけど、まず自分のことを疑ってないね。
そりゃ技術屋だし、自分の技術には最低限自信もあるだろうけど、
同一システム上の他のネットワーク関係もおかしいなら話は別だけど、そうではなさそうだし、
貴社製作アプリケーションでしか再現しない不具合なら、
最初に疑うのは自分で有るべきだと思う。

最後に、予想で物を言わせてもらうんだが、
接続が全切断しているってことだけど、それがサーバーからの切断と”仮定”した場合、
接続中に起こりうる処理の中に不具合があり、その為例外的に
切断処理のコードに飛んでしまうことも考えられると思う。
てか、どういう仕組みのアプリか分からないし、通信だけが原因かも特定できてないから、
これ以上言いようがない。

てことで、あとは頑張って。皆もスレ汚してごめんね。
436デフォルトの名無しさん:2005/04/06(水) 17:45:24
で、APIの戻り値はどういってるんだ?
唐突に全コネクションが消失するなら、ネットワークカードの
トラブルで下位レイヤが落ちたとかも考えられるが。
437デフォルトの名無しさん:2005/04/06(水) 18:00:34
>>432
当たりです。

>>433
そうなんですかぁ。。。私は知らない。それを教えて欲しいなぁ。
サーバの状況ですか。Win2003 サーバ、VBコーポレートエディション、PCAnyWhere
くらいは入ってるかなぁ。当社から提供したのはアプリだけなので、他に何を入れら
れてるかわかりません。が、おそらく上記のものがメインです。
ちなみに、状況って?具体的には何が必要?見ることが出来るのは落ちてからしばらく
したあとの netstat -an くらい。関係するポートは一切なし。これは前も書いた通り。

>>434
listen と accept の違いがわからないってどこで気づいたんだ?もしかして、おぬし
超能力者か!?それもユリゲラークラスの!?

>>435
丁寧な反応ありがとー。
接続は全て有線。物理的に線を抜いても listen ポートは閉じない。ローカルテストで
確認済み。それと自分は常に疑ってる。だから、自分のプログラムデバッグしたい。
でも、現象が再現しないからテストも出来ない。で、現象を再現する手立てを模索中。
狙いは listen ポートを運用中に閉じること。
435ありがとー。がんばっちみる。

433、434以外の皆様スレ汚してスマソ
438デフォルトの名無しさん:2005/04/06(水) 18:04:16
>>436
最終的にはそこも疑ってる。既製品じゃ無いんだ〜(汗
439デフォルトの名無しさん:2005/04/06(水) 18:08:47
なんだ一人言か。。。
440デフォルトの名無しさん:2005/04/06(水) 18:17:31
とりあえずデバイスマネージャからイーサネットの「デバイスを無効にする」
にしてから、また有効にしてみるというのはどう?

まあ、HWエラーなら、イベントビューワになんか出てる気もするけど。
441デフォルトの名無しさん:2005/04/06(水) 18:30:10
accept()でエラーが起きているかどうかもわからんなんてネタだろ?
442デフォルトの名無しさん:2005/04/06(水) 18:35:44
>>437
listenが異常終了とか言うから誤解したんじゃねーの?
443デフォルトの名無しさん:2005/04/06(水) 18:38:34
>>440
やってみましたが、それでは listen ポートは落ちない様ですね。

>>441
ネタなら、もう少しましなの考える。
444デフォルトの名無しさん:2005/04/06(水) 20:14:08
サーバプロセスは生きてるわけ?
だったら、そのソケットをクローズしちゃったってのを
まず最初に疑うべきだと思うけど。
ハンドルをクローズしているところで引数を間違えてる
とか、そういう奴。
445デフォルトの名無しさん:2005/04/06(水) 20:26:26
イーサネットのカード引っこ抜いてみれば?
446デフォルトの名無しさん:2005/04/06(水) 20:27:23
>>445
listenは死なないと思うよ
eth0が無くてもloがあるし
447デフォルトの名無しさん:2005/04/06(水) 20:33:22
何がしたいのかよくわからんな。
448デフォルトの名無しさん:2005/04/06(水) 20:35:42
>>444
ちょっとその周り疑ってみる。ライブラリは実績あるし。それを使ってるヤシが怪し
いのには賛成。

>>446
その通り。

結局外部から listen ポートを落とすなんて荒業はあんまり聞かないって事で、使っ
てるヤシら、てってーてきに洗いなおしてみる。
でも、ローカルで同じ現象が出ないのがくやすい。。。_| ̄|○
449デフォルトの名無しさん:2005/04/06(水) 20:50:24
やっぱりここで情報収集するのは無理なようですね。
450デフォルトの名無しさん:2005/04/06(水) 20:51:29
>提供したプログラムのlistenポートが落ちてクライアントが接続できなくなる事があって困ってます。
これの根拠は?
451デフォルトの名無しさん:2005/04/06(水) 20:53:45
プログラムが悪いんだからソース公開すれば?
ここの人ならすぐわかるでしょ。
452デフォルトの名無しさん:2005/04/06(水) 21:07:47
>>450
根拠は>>413の「netstat -anで LISTEN と出てない」って
いう症状でしょ。少なくともUNIX系なら、これは確実な証拠。
Windowsだと違うの?

>>451
クローズの引数間違えてるってのが当りだとすると、全然
関係ない部分でも起きうるから、ソース見るだけだと結構
面倒だと思う。もっともクローズ呼んでるところなんて、
そんなにないだろうから、全部の個所でログを吐くように
して症状を再現させれば、即効で判明すると思うけど。
453デフォルトの名無しさん:2005/04/06(水) 21:10:23
クローズの引数間違えてなかったっす_| ̄|○
454デフォルトの名無しさん:2005/04/06(水) 21:16:34
うーん、これがUNIXなら、異常が起きたら知らせて
もらって、リモートからデバッガを attach して
様子を調べるとかするんだけどなあ。
デバッガから、対象となるソケットに対して accept()
や fstat() を呼びだしてみれば、どういう間違いを
犯したかぐらいは、すぐ判明する気がする。
こういうのって、Windows だとどうするのがいいの?
455デフォルトの名無しさん:2005/04/06(水) 22:17:17
ローカルで再現できないってpacket dropが無いからに一票。 よくみるバグだけど
tcpの切れ目が常にクライアントとサーバで同じと見なしたコーディング。 うちの
会社ではネットワークシミュレータ(パケットの遅延、ドロップ)をはさんでテストするよ。
こういうバグはそれですぐ引っかかる。
456デフォルトの名無しさん:2005/04/06(水) 22:37:32
>>455
packet drop すると listen してるポートが落ちるんですか?
457デフォルトの名無しさん:2005/04/06(水) 22:44:33
でも、listening socketをcloseしちまったら、acceptが文句を言わない?
458デフォルトの名無しさん:2005/04/06(水) 22:47:30
後は、ほとんどのスレッドが死んでて、WsaCleanupも呼ばれてるけど、
プロセスが最後の最後で死に切れてないだけ、とか。
459デフォルトの名無しさん:2005/04/06(水) 22:49:52
クローズした後 別のソケットをオープンしたら、たまたま
同じハンドル値に割り当てられて、select()待ちに入って
抜けてこないからaccept()が呼ばれないとかいうのは、
ありうるような。
実はaccept()のエラーを見てないだけだったりして。
460デフォルトの名無しさん:2005/04/06(水) 22:53:48
>>452
> 根拠は>>413の「netstat -anで LISTEN と出てない」っていう症状でしょ。
> 少なくともUNIX系なら、これは確実な証拠。Windowsだと違うの?

サーバはWindows(>>437)なのだが…
この話題止めない?

ろくな情報ももたらさず、(エラー処理&ロギングもなければ、パケットトレースもない)
プログラミングとは関係ない話(トラブルシューティング)するのは荒しと同じだよ。
後はWindows板でも行って。
>>427の言うように技術の話じゃないから、プログラマ板の方が適当かも。
461452:2005/04/06(水) 23:10:38
いや、当該サーバがWindowsなのは知ってるよ。
でもnetstat -anの状態表示に関しては、Windowsも
UNIXと同じだと思ってたんだけど、違うの?

この話はデバッグ時に実際に役立つから、ム板でいいよね?
462デフォルトの名無しさん:2005/04/06(水) 23:54:54
>>456
バグは要するにデータを誤って読むから論理が破綻してクラッシュしたり想定してない
異常処理にいく。 それで症状としてlistenしてない状態になるとか。 あくまでも
サーバーの論理の問題。
463デフォルトの名無しさん:2005/04/07(木) 00:46:55
>>461
ソケットがnetstat -naで捉えられないことは、
一部の呆け以外もうみんな分かっている。

じゃあ、何故なのか、それはサーバのプログラムを調べないと知りようがない。
少なくともaccept()がどうなっているかくらいは調べるべきだ。

これでもうこの話題はいいか?
464デフォルトの名無しさん: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キボン
465デフォルトの名無しさん:2005/04/07(木) 01:32:47
Windows の場合、bind() したけど listen() してない
状態でも LISTENING と表示されるらしい。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;418762
でも、今回の件のように listen() しているのであれば、
間違いなく LISTENING と出る筈。
466デフォルトの名無しさん:2005/04/07(木) 01:33:33
NT3.5の頃は、LISTENING表示そのものが出なかったが、今回の件は、
ちゃんと動作している間は LISTENING と出ているらしいので、当
てはまらない。
http://support.microsoft.com/default.aspx?scid=kb;ja;402147
いまどきNT3.5を使ってるとも思えないし、
467デフォルトの名無しさん:2005/04/07(木) 01:34:25
実は Microsoft Internet Security and Acceleration Server 2000
に関しては、今回話題になっているのと同様な問題が報告されている。
ttp://support.microsoft.com/default.aspx?scid=kb;ja;307784#appliesto
これは、ISA Server の バグらしい。SP1を当てれば直る。
ひょっとして、ISA Server をインストールしている?

>>463が何を根拠に発言しているのかは良く分からない。
468デフォルトの名無しさん:2005/04/07(木) 02:48:56
>>463
> ソケットがnetstat -naで捉えられないことは、

修正します。

ソケットが存在しないことが、netstat -naで確認されていることは、
469デフォルトの名無しさん:2005/04/07(木) 08:44:30
というかさ・・・デバッグぐらいしろよ。

それとエラーが返る可能性のある全てのAPIはちゃんとエラーチェックしてログ吐け。

ネットワークが関係ないレベルの話だ。
470デフォルトの名無しさん:2005/04/07(木) 08:52:33
お前らが相手にするからダラダラ長引くんだろ
471デフォルトの名無しさん:2005/04/07(木) 11:36:27
>>470
申し訳ありませんでした。
472デフォルトの名無しさん:2005/04/07(木) 16:28:59
教えてください.
Linuxでサーバプログラムを作っています.
bindでIPアドレスを指定していますが,そのネットワークインタフェースの
IPアドレスが変更された後も,引き続き接続要求を待ち受けたいのです.
思いついたのは,いったんsocketをクローズしてはじめからやり直す方法ですが,
もっとスマートな良い方法はありますか?
473デフォルトの名無しさん:2005/04/07(木) 16:36:13
bind()でIPアドレスの代わりにINADDR_ANYを指定する。
TCPならこれで無問題。UDPだと場合によりけり。
474472:2005/04/07(木) 16:51:28
>>473
どうもです.
Etherが2つあって,そのうちの1つだけでサービスを提供したいんです.
それでそのEtherのIPアドレスを使ってbind()していたんですが,
INADDR_ANYだとすべてのインタフェースから受け付けることになってしまいますよね?
ちなみに,TCPを使用してます.
475デフォルトの名無しさん:2005/04/07(木) 17:03:03
サービスを提供したくないインターフェースは別途
packet filtering ではじくって手があるけど。
それが嫌なら、やっぱりクローズしてやり直すのでは?
476デフォルトの名無しさん:2005/04/07(木) 17:06:08
> ネットワークインタフェースのIPアドレスが変更された後も,引き続き接続
> 要求を待ち受けたいのです.
(;´Д`)
477472:2005/04/07(木) 17:49:38
組み込みってことで,Filteringの導入は難しいんです.
やっぱり,やり直すのが王道なんですかね?
クローズしてしばらくはそのPortが使えないみたいなことを言われて躊躇してまして...
478デフォルトの名無しさん:2005/04/07(木) 17:59:22
>>477
SO_REUSE{ADDR|PORT} のことか?
479472:2005/04/07(木) 18:30:19
>>478
なるほど,完全に理解はできてませんが,これのことを言われたんだと思います.
ちょっと勉強してみます.
さんくすです.
480デフォルトの名無しさん:2005/04/08(金) 03:19:34
>>474
> Etherが2つあって,そのうちの1つだけでサービスを提供したいんです.

INADDR_ANYで、接続受けてから、getsockname(2)して、
駄目な方な場合のみ即close(2)しちゃうって手もあるが。

これならサービスダウン期間ができないし。
481デフォルトの名無しさん:2005/04/08(金) 16:37:16
あー、たしかに。
その手の方法でいいなら、自分で getsockname(2)
しなくても、libwrap をリンクして、安直に
TCP wrapper に任せちゃうって手もあるかもねえ。
482472:2005/04/08(金) 17:24:41
>>480
そうすねー,他人の書いたコードを流用するっていうんで,
先の考えになったんですけど,
こっちのやり方の方が良いように思いますね.
後は実装して,実験してどっちをとるかですかね...
483デフォルトの名無しさん:2005/04/09(土) 06:55:02
質問です。
TCPのコネクションについてなんですが

こちらがSYNを送る
相手がACKを送ってくる
相手がSYNを送ってくる
こちらがACKを送る
これで接続が完了するようですが、最後のACKが正常に送れたかどうかのチェックはどうしてるのでしょうか?
送りっぱなしで相手に届いてない場合、相手の処理とか困るだろうし・・・

宜しくお願いします。
484デフォルトの名無しさん:2005/04/09(土) 07:00:57
プログラミングと言うよりプロトコルの理解が足りない
ネットワークプログラミングではまるのは下位プロトコルの理解が足りないってUNPに書いてあった
485デフォルトの名無しさん:2005/04/09(土) 07:06:56
まぁ、質問ってのは、理解してないから理解するためにやるもんだがな。
ちょっとこの前TCPの解説書としては定番の「マスタリングTCP/IP」を読んでみたが
下位レベルのプロトコルの説明が不十分で、接続に関しては本当に>>483くらいの事しか書いてなかった。
そのくせやけに他が詳しく書いてたり、バランスが足りないっていうか・・・

とりあえず、TCPの事しるには、洋書読むしかないよ。
もしくはその手のMLをROMしてると理解できる。
486デフォルトの名無しさん:2005/04/09(土) 07:07:24
ACKが届かなければ相手はタイムアウトしてリトライしてくるなり
あきらめるなりするのでわないの?

ACKの確認が必要なら、さらにその確認が必要で、さらにまた....
487デフォルトの名無しさん:2005/04/09(土) 07:10:20
なぁ…。前から思うんだが、ここもそうだが質問系のスレでよくある全然関係ないウンチクを並べてるヤツって
質問の内容そのものに対しては一切触れてないことが多いんだが、本当にわかってるの?
質問スレで、質問そのものにウンチクするのって本当に無意味だと思うんだが・・・
そんな余力あるなら答えてやれよって思うのは俺だけ?
じゃあ俺が答えろって?正直言って俺は分らん
488483:2005/04/09(土) 07:16:56
レスありがとうございます。
>>486
なるほど、ではその場合
こちらは繋がってるつもりで、相手が繋がってないという状況になりますね?
この状態でデータを送って、もし送れなかったらコネクションを切ると言うことなのでしょうか?
489デフォルトの名無しさん:2005/04/09(土) 07:26:12
>>483
TCPのACKは、ACKパケットってのが特別にあるんじゃなくて、
全てのTCPパケットのヘッダに埋め込まれていて、
シーケンス番号のここまでは一つの欠けもなく全部受け取ったよって意味。

だから「バイトごとのACK」「TCPパケットごとのACK」って考え方だと、
その後の送出TCPパケットの全てにおいて、ACKを「再送」している、ことになっている。

つまりACKは接続が生きている間、ずっと送り続けている、ってのが、
あなたの質問にあわせた(考え方での)答え。
タコ本はこういうことはちゃんと解説できてない。

そういう意味であなたの疑問は非常にいいところを突いていた。
基本部分をちゃんと理解できているからそういう質問が出るんだろうね。

>>485
> とりあえず、TCPの事しるには、洋書読むしかないよ。

Steavensの「詳解TCP/IP」シリーズがあるじゃない。
あれは問題も解くと非常に非常に非常に力がつきます。
「マスタリングTCP/IP」については同じ考え。
490489:2005/04/09(土) 07:30:07
>>488
相手はSYNを送ってきているのだから、
接続を放棄するにはFINを送ってくるはずです。

相手が何らかの問題を抱えている場合、(FINを遅れないような)
ICMP(port unreachableなど)が送られてくる可能性もあります。

全く何も反応がなければ…どうしちゃったんでしょうね。
タイムアウトしかないですね。

http://www.faqs.org/rfcs/rfc793.html に、
ほとんどのことは、初級レベルだと全て、書いてありますよ。
491483:2005/04/09(土) 07:45:02
>>485
なるほど・・・
何もコネクションの時だけ、そのような処理をしてるわけじゃないんですね。
rfc793を読んで勉強してみます。
どうもありがとうございました。
492489:2005/04/09(土) 07:57:24
>>491
その前に>>2にある
>詳解TCP/IP〈Vol.1〉プロトコル
>http://www.amazon.co.jp/exec/obidos/ASIN/4894713209/
これ読むあるね。(>>489 Steavens→Stevens)
493デフォルトの名無しさん:2005/04/09(土) 09:57:46
マスタリングTCP/IP のシリーズは、外人の書いた本の
翻訳物だけ買ってまつ。SSL/TLS編とかRTP編とか。
494デフォルトの名無しさん:2005/04/09(土) 20:31:30
エセ中国人は消えろ
495デフォルトの名無しさん:2005/04/10(日) 01:10:54
中国人も消えろ
496デフォルトの名無しさん:2005/04/10(日) 16:24:50
相手から受け取ったデータを処理して、その相手に返信のデータを返す
というプログラムを書いてたんだけど、何故かデータが後半しか届かない。

おかしいと思ってキャプチャしてみたら
相手からのPSHに対するACKにデータの前半が乗ってた。
ふつー、こういうときって[PSH,ACK]にならないか?
TCP_NODELAYだとこうなるのかね・・・
識者の見解キボン
497デフォルトの名無しさん:2005/04/10(日) 16:54:10
初歩的なことですみません。
socket()で得たディスクリプタの番号をbind()してsockaddrと結びつけますよね。
その後で、ディスクリプタ番号だけをひきずり回してプログラムを組みたいので
すが、ディスクリプタの番号だけからsockaddrを取得することはできますでしょ
うか。
やっぱりsockaddrもいっしょにひきずり回すしかないでしょうか?
498デフォルトの名無しさん:2005/04/10(日) 16:58:46
>>497
getsocknameとかgetpeernameとかでソケットから引ける気がする
499496:2005/04/10(日) 17:03:45
クライアントのTCPの実装がどうもヘボいみたいだ。
ようするに、piggybackを抑止すれば良さそう。
でもどうやって・・・?
500デフォルトの名無しさん:2005/04/10(日) 17:06:51
>>498
どうもありがとうございました。わかりました。
501デフォルトの名無しさん:2005/04/10(日) 17:11:25
このスレで
wininetって欠片も出てきませんね。。
502デフォルトの名無しさん:2005/04/10(日) 17:22:48
誰も使い方知らないからね・・
503デフォルトの名無しさん:2005/04/10(日) 18:11:52
>>502
誰も使わないの間違いだろ
504デフォルトの名無しさん:2005/04/10(日) 18:20:58
>503
おまえは知ってるのか?
教えてやれよ
505デフォルトの名無しさん:2005/04/10(日) 18:42:13
質問です。
相手がプライベートIPアドレスしか持ってない場合
その相手に関してユニークな情報ってありますか?
相手がプライベートIPアドレスしか持ってない場合、相手が二重にクライアントを起動していたら
送信先がわからなくなってしまうんで・・・
506デフォルトの名無しさん:2005/04/10(日) 18:46:23 BE:54052782-
LAN内ではユニーク
NAT使え
ってこと?
507デフォルトの名無しさん:2005/04/10(日) 18:48:14
>>506
いえ、途中でグローバルなノードを経由するので、ポートが正しく開いて無くても(NATを設定していなくても)到達出来るようにするつもりなのです。
ただ、その場合の、送信先をどのように定義すれば良いのかが・・・
508デフォルトの名無しさん:2005/04/10(日) 18:53:49
>>507
相手がクライアントなら二重起動(接続)されても
ソケットが二つになるだけだから、それで区別する。
あとはアプリケーション層で解決。個別IDなりなんなりを
クライアントから送らせるとか。
509デフォルトの名無しさん:2005/04/10(日) 23:07:45
>>496,499
そういうレベルの問題があるようなTCP実装は、
他にも大問題がボコボコあるに決まっているので、
早急に上司に相談して、別のまともな実装に乗り
換えるべし。
さもないとプロジェクトがオオゴケすると思われ。
510デフォルトの名無しさん:2005/04/10(日) 23:37:51
>>496
読んでも、状況が特定できんよ。

> 相手からの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)
511デフォルトの名無しさん:2005/04/10(日) 23:43:54
>>507
TCPの接続は、
<localのIPアドレス、localのポート番号、remoteのIPアドレス、remoteのポート番号>
の四つ組でユニークに識別できます。世界で唯一です。(でなければルーティング不能)
OSのTCP moduleもこの方法で接続を識別しています。

NATやグローバルなノードでの<remoteのIPアドレス、remoteのポート番号>を得て、
NATやグローバルなノード先のことは気にしないでいいです。
それはNAT, LAN内で解決するべき事ですから。
そうしないとあなたのアプリはNAT透明性がなくなってしまいます。
512質問age:2005/04/11(月) 00:07:37
RedHatLinux7.1 + gcc でソケットプログラミングをしようと思っております。
なんとか環境までは構築できて、HelloWorld はコンパイル&動作はできました。
次にいよいよソケットプログラミングなんですが、、、なんかこう、シンプルな
サンプルソースなぞはありませんか?

apacheとかのソースは膨大過ぎて・・・。
ttp://www.hellohiro.com/socket.htm
ぐらいのシンプルなのがあれば助かります。
513デフォルトの名無しさん:2005/04/11(月) 00:11:13
↑次にintの配列の送受信の方法が解りませんとか言い出すんじゃないぜ。
514質問age:2005/04/11(月) 00:18:20
>>513
一応組込屋です。探したんだけど、Winsockのサンプルしかなくて。。。_| ̄|○
JavaやWinならサーバ側もクライアント側もやった事はあるんだけどね、
お客様がLinuxでやりたいとか仰ってトホホなんでつよ。。。
515デフォルトの名無しさん:2005/04/11(月) 00:59:56
>>514
TCP/IPによるネットワーク構築〈Vol.3〉Linux/POSIXソケットバージョン−クライアントサーバプログラミングとアプリケーション
http://www.amazon.co.jp/exec/obidos/ASIN/4320120841/

これ買いなよ。

それから、>>2の「Linuxソケットプログラミング」を。
さらに、>>1にあるProgramming UNIX Socket FAQは必ず全部読め。
516512=514:2005/04/11(月) 01:19:04
自分の本棚からコレ(↓)をハケーン
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1031-0
そういや4年前Linuxの案件の時に随分と助けられた。
というわけでしこしこ組んでみるです。
517デフォルトの名無しさん:2005/04/12(火) 00:08:29
accept()で、次々と接続を受け入れても、ポートは消費しないですよね?
みんなlisten()しているポートを使用するということでOKでしょうか?
518デフォルトの名無しさん:2005/04/12(火) 00:21:36
TCPパケットをよく見ろ
519デフォルトの名無しさん:2005/04/12(火) 01:39:15
>>517
OKです。
520デフォルトの名無しさん:2005/04/12(火) 03:46:38
listenポートは、次から次へと男を乗り換えていく魔性の女だな
521デフォルトの名無しさん:2005/04/12(火) 05:02:18
質問です。
TCPで
typedef struct{
int hoge1;
int hoge2;
char *hoge3;
}SEND_DATA;

こんな感じの構造体を送るようにしたんですが、
どうも上手く受信出来ません。
もちろん#pragma packを使ってアライメントの問題も解決してたはずなんですが・・・
なぜでしょう?
charが受信できないのです。

522デフォルトの名無しさん:2005/04/12(火) 05:05:17
ポインタ送ったってしょうがないだろボケ。
Cの勉強し直して来い。

っていうか、これって前にも見た気がするんだけど。
釣られたのかしら。orz
523521:2005/04/12(火) 05:11:25
THX!!
ホントだ・・・orz
いえ、さすがにこれは初めてですよ。
しっかし、配列あらかじめ固定にしてしまうのはちょっと無駄に感じてしまうんですけど・・・
どうにか可変長にする方法ってないですかね?
524デフォルトの名無しさん:2005/04/12(火) 05:13:34
Lengthつけて実体送ればいいだけの話ではないの。
525521:2005/04/12(火) 05:16:01
>>524
それだと、構造体の大きさが送信側と受信側で変わってしまう事になりますよね。
受信側でキャストした時に正常に受信できるのでしょうか?
526522=524:2005/04/12(火) 05:21:25
>>524
キャストしなければ良いだけのことでしょ。
それに少なくとも、int 2つとlengthに関しては固定にはなるし。
charデータ実体だけ別処理でも良いんでは?
というか、後々の事と自分以外がメンテする時の事考えて、
俺の場合は、受信データをキャスト一発で処理っていうのは、
ほとんどやったことが無いよ。

あ、そうそう>>521での人違いゴルァはすまなかった。
そっくりなのを以前見たことがあったもんで。
527デフォルトの名無しさん:2005/04/12(火) 05:24:43
アンカー訂正orz
>>524=>>525
>>521=>>522
528デフォルトの名無しさん:2005/04/12(火) 08:24:25
struct SEND_DATA {
 int length;
 char buf[1];
};

これとか。
529デフォルトの名無しさん:2005/04/12(火) 09:22:25
>>519
んなことないって。
530デフォルトの名無しさん:2005/04/12(火) 10:37:57
>>528
きっと、次の質問は
「データが1byteでは足りないのですが・・・」
の(゚∀゚)ヨカーン

lc.exeだと
struct SEND_DATA {
 int length;
 char buf[];
};
は通らないんだっけ?
531デフォルトの名無しさん: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 で解決するってのは移植性悪いし。
532デフォルトの名無しさん:2005/04/12(火) 11:35:40
そのコードのどこでhoge3のメモリ確保してんのさ。
そう言う話だろうよもともとは。
533デフォルトの名無しさん:2005/04/12(火) 12:14:36
>>528>>530だってメモリ確保はしてないじゃん。
同じこと。
534デフォルトの名無しさん:2005/04/12(火) 12:39:03
>>531
>>523の「どうにか可変長にする方法ってないですかね?」
から始まる流れだとすれば、>>528>>530は別に間抜けでもなんでもないと思うけど?
構造体を可変長っぽく扱うためのよくある方法を書いただけだし。

構造体のタグが一緒なのはちょっと間抜けっつーか、誤解を招くなとは思うけどさ。
535デフォルトの名無しさん:2005/04/12(火) 15:15:25
そう? >>521のままで問題ないってことを説明しないで
すぐに>>528>>530のような解を勧めるのって変じゃない?
送りたいデータ形式が、アプリケーション内でSEND_DATAとは
別の構造で保持されているとすると、>>521の構造体の方が
無駄なメモリコピーが少なくて済む点でもマシだし。

アプリケーションで扱う構造そのままを渡すインターフェース
にする方がもっといいだろうけどね。
536デフォルトの名無しさん:2005/04/12(火) 18:58:36
固定長でいいよ
537デフォルトの名無しさん:2005/04/12(火) 19:03:54
>>519
便乗で質問ですが使用しているポート番号ってどうやって知りますか
538デフォルトの名無しさん:2005/04/12(火) 19:17:19
netstat?
539デフォルトの名無しさん:2005/04/12(火) 20:06:26
>>520
乗り換えるっていうか、同時に付き合ってるでしょ。
540デフォルトの名無しさん:2005/04/12(火) 20:25:16
>>539
いやいや、他の女に振り分けちゃうじゃん
541デフォルトの名無しさん:2005/04/12(火) 20:28:39
この辺の話って勘違いしている人おおいよね。
542デフォルトの名無しさん:2005/04/12(火) 20:36:54
UDPなんかは一度寝た男でも簡単に捨てれるよ
543デフォルトの名無しさん:2005/04/12(火) 22:51:00
TCPの接続は四つ組みで識別されるので、
<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>
は別の接続です。
544デフォルトの名無しさん:2005/04/13(水) 00:21:27
よーし、listenポートにconnectしちゃうぞー。
545デフォルトの名無しさん:2005/04/13(水) 00:36:16
じゃぁ俺はポートを消費しちゃうぞー。
546デフォルトの名無しさん:2005/04/13(水) 00:40:16
ついでに SYN Flood Attacks しちゃうぞー。
547デフォルトの名無しさん:2005/04/13(水) 01:54:30
・WSAECONNRESET
・WSAECONNABORTED
・WSAESHUTDOWN
これらってどんな場合にでるかわかる方います?
ノンブロッキングソケットを使っているのですが、
WSAECONNABORTEDしか出なくて・・・
548デフォルトの名無しさん:2005/04/13(水) 06:57:49
>>547
> ・WSAECONNRESET

http://support.microsoft.com/kb/263823

> ・WSAESHUTDOWN

既にshutdownしているソケットを使おうとした場合。
549デフォルトの名無しさん:2005/04/13(水) 06:58:14
>>517はどう考えてもネタだろ…
550デフォルトの名無しさん:2005/04/13(水) 07:01:23
MSDNによれば、
ECONNRESETは相手がHARD CLOSEしたときや、keep-aliceで切断されたあと。
ESHUTDOWNは、shutdwon(SD_SEND)したあとにsendしようとしたとき。
に出るような事が書いてあるなぁ。
551デフォルトの名無しさん:2005/04/13(水) 07:02:10
アリスを維持します。
552デフォルトの名無しさん:2005/04/13(水) 09:17:51
>>549
なにげに >>543 をわかってない人もいると思うよ。
>>549 もそうだったりして。
553デフォルトの名無しさん:2005/04/13(水) 11:33:28
>>548
リンク先は障害情報では?

知りたいことですが、RST受けた時に、
ブロッキングソケットでは、WSAECONNRESET が返るのですが、
ノンブロッキングソケットでは、WSAECONNABORTED が返るので
何でかなぁってことです。
554デフォルトの名無しさん:2005/04/13(水) 23:41:19
RPCもこのスレでいいんでしょうか。

下のコードで最後の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()は正常に返ってきているんですが・・・。
555デフォルトの名無しさん:2005/04/14(木) 17:33:32
質問失礼します。

winsock初めて2日目の初心者です。

UDPで離れた場所との通信を行おうと考えています。
LAN内での通信は成功しました。
gethostname gethostbynameでhostent(ローカルIP)を取得し、sendtoで使用しました。

離れた場所との通信を実装する場合、sendtoで与えるhostentをグローバルIPにすれば良いと単純に考えているのですが、認識は合っていますでしょうか?
他の場所にマシンが無く、確認しようが無いのです。。。orz
(127.0.0.1 との通信はできました)
556デフォルトの名無しさん:2005/04/14(木) 21:19:05
>>555
認識はそれでOK
ただ、間にNATとかあると考えもの
557デフォルトの名無しさん:2005/04/14(木) 23:51:31
こんばんわ。質問です。

NAIのSnifferや、SmartBitsでできるような、任意のデータリンクフレームを
送出するという機能をもつツールを作ってみたいと思っています。
LinuxやBSDでは、PACKETやBPFで出来るようなのですが、
Windowsでこのようなものを作る時に使えるライブラリや手段等はありますでしょうか?
「NE2000の仕様を読んで自分でNICのドライバ書け!!」というのでなく、
LinuxでSOCKETを使ってできるくらいのボリュームだとありがたいのですが。

(raw socketで自由に記述できるのは、IP層のヘッダから、という認識でいいんですよね?)
558555:2005/04/15(金) 00:53:57
>>556
返答ありがとうございます。
このまま突き進んでみます。
559デフォルトの名無しさん:2005/04/15(金) 00:54:39
悪用か…
560デフォルトの名無しさん:2005/04/15(金) 01:59:19
>>554
横だがポート0にバインドするってなんか意味あるの? やったら確かに成功するのだが
(特権も無いのに)。 ちなみに自分は上のコードでtransp帰ってきたよ。 
561デフォルトの名無しさん:2005/04/15(金) 05:04:29
質問です。
send()はブロッキング関数ですが
これは、相手とのsocketが無効になったなどの要因による送信不可の状況でも、永久ブロックしてしまうんでしょうか?
それともエラーを知らせる戻り値を返して終わりなのでしょうか?

私は後者だと思ってたんですが、ちょっとWinsockを勉強してるんですけど、どこかでブロックしてるんで
ここが怪しいと思うんですけど・・・
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
プログラマが、自分の書いたプログラムが、どこかでブロッキングしているのに、
どこでブロッキングしているか調べられないなんて、問題外だと思います。

>>561
エラーとして処理すべきかしばらく待つべきなのか分からないことがあります。
分からない場合には、設定された時間(keepaliveタイマなど)だけ待ちます。
566デフォルトの名無しさん: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
プログラマが、自分の書いたプログラムが、どこかでブロッキングしているのに、
どこでブロッキングしているか調べられないなんて、問題外だと思います。
567デフォルトの名無しさん:2005/04/15(金) 06:39:35
>>565がお前の質問に答えてくれてることすら理解できねぇのか。
どうし様もねぇカスだな・・お前。
568デフォルトの名無しさん:2005/04/15(金) 06:46:48
またふえたバカ
>>567

567 名前:デフォルトの名無しさん :2005/04/15(金) 06:39:35
>>565がお前の質問に答えてくれてることすら理解できねぇのか。
どうし様もねぇカスだな・・お前。
569デフォルトの名無しさん:2005/04/15(金) 06:50:41
バカ厨は放置よろ。> ALL
570デフォルトの名無しさん:2005/04/15(金) 07:01:49
このスレバカばっかり
二度とこねーよこんなスレ
571マイク ◆yrBrqfF1Ew :2005/04/15(金) 07:49:46
別にバカばかりなのはこのスレだけじゃないがな。
572デフォルトの名無しさん:2005/04/15(金) 08:35:57
>>561
エラーが起こればブロックしないで返ってくる。
winsock なら戻り値として SOCKET_ERROR が返ってきて、
その時に WSAGetLastError() を呼べば原因がわかることになっている。
573デフォルトの名無しさん:2005/04/15(金) 09:05:23
偉そうに見当違いのレスをするから荒らされる。
荒らされないためには、知らない奴は黙って見ていること。
回答だけするべし。
574デフォルトの名無しさん:2005/04/15(金) 09:43:09
>> 560
UDPのポート番号0番は、NFSで使ってるろ。
RPCと関係あるんじゃない?
575デフォルトの名無しさん:2005/04/15(金) 10:29:10
NFSは2049番だろ。
0番でbind()すると、ephemeral port を割り当ててくれるの。
実際に0番を使うわけじゃない。
576デフォルトの名無しさん:2005/04/15(金) 13:38:35
なんだこりゃあ・・・・最悪な厨房が大暴れしてんな。
577デフォルトの名無しさん:2005/04/15(金) 17:10:02
ごめん、フラグメント化されたUDPパケットは、
ポート番号が入っていない(0が入っている)
ってのと間違えた。
578560:2005/04/15(金) 19:39:29
>>575
おお、そうでしたか。 だから特権なしでokなわけですね。 ありがとうございます。
579554:2005/04/15(金) 22:22:46
解決しました。

/usr/ucblib/librpcsocをリンクしたらうまくいきました。
(OSがSoralis, SunOS5.6の場合はこれが必要)

rpcsocをリンクしなくてもコンパイル&リンクが
通っていたので油断してました。

お騒がせして申し訳ありませんでした。
580デフォルトの名無しさん:2005/04/16(土) 03:01:31
select待機後のrecvの受信中でLANケーブルを断線 した時
タイムアウトか何かでブロックしたままの状態になる場合があるのですが、
対策できませんか。
581デフォルトの名無しさん:2005/04/16(土) 09:08:06
>>580
HeartBeatメッセージのようなものを定期的に送受信して監視する。
582デフォルトの名無しさん: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'}で取得しています。
 もっと簡単に取得する方法は無いでしょうか?

以上です。
よろしくお願いします。
583デフォルトの名無しさん:2005/04/16(土) 10:25:08
ローカルIPの自分から、グローバルIPの自分にsendtoしたのか?
なら、通信できなくて当然だなぁ。
グローバルIPの自分ってつまり、ルータのことになるんだが。
584デフォルトの名無しさん:2005/04/16(土) 10:40:57
>>582
NATで自分に割り当てらえているグローバルIPに、
自分自身が接続しようとしているって事?

それが出来るかどうかはルータ依存。
出来なくても何の不思議もない。

>>403と同じ状況?
585デフォルトの名無しさん:2005/04/16(土) 10:45:45
>>557
自己レス
WinPcapを使って、実現できました。
http://winpcap.polito.it/docs/docs31beta4/html/group__wpcap__tut8.html
586582:2005/04/16(土) 11:15:57
ありがとうございます。

>>583
>ローカルIPの自分から、グローバルIPの自分にsendtoしたのか?
いえ違います。

別の場所(10km程離れています)のグローバルIPです。
>>584 さんも、同じ質問をしてくるって事は、
「sendtoで与えているローカルIPをグローバルIPに変えた」
これで上手く行くはずって事ですよね!?

>>403 さんとは似ていますが、違う様です。

これ書いてて思ったのですが、少々お馬鹿なデバッグをしていたのかも知れません。
@に関しては保留させてください。確認してみます。
 確認が終わったら報告します。

休日だというのに10km自転車で行かなきゃいけないのか。。。orz
すいません。
追加質問させてください。
B皆さん、グローバル通信環境(?)でのデバッグってどうされてます?
 ようするに別の場所のPCを扱いたいのですが。。。
587デフォルトの名無しさん:2005/04/16(土) 11:19:47
NATが原因
588582:2005/04/16(土) 11:22:13
あっ
>「sendtoで与えているローカルIPをグローバルIPに変えた」
>これで上手く行くはずって事ですよね!?
↑これが出来ればローカル環境でデバッグできるじゃん。。。
 なに言ってんだ俺。。。orz
589デフォルトの名無しさん:2005/04/16(土) 11:25:58
ポート閉じてるだけじゃねーの?
590デフォルトの名無しさん:2005/04/16(土) 13:27:26
>>586
> B皆さん、グローバル通信環境(?)でのデバッグってどうされてます?

プログラミング的には、別にグローバルだとかローカルだとか関係ない。
NATだけ気をつければ、何も変わりはない。

マ版的なデバッグ環境話としてはsshでログイン。
591582:2005/04/16(土) 14:26:50
ありがとうございます。

>>587
φ(。_。)メモリますた。

>>589
φ(。_。)メモリますた。

>>590
φ(。_。)メモリますた。

意味が完全には理解できていないので、色々調べてみます。
592582:2005/04/16(土) 14:27:14
今、その10km離れた別の場所に来ています。
で、@の確認の結果報告ですが、やっぱ駄目でした。。。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翻訳しましたよ。しても分からんのですヽ(`Д´)ノ)
593582:2005/04/16(土) 14:38:02
ttp://support.microsoft.com/kb/263823/JA/
自宅も、10km離れたこのマシンもWin2000ですが、共にsp4です。
594デフォルトの名無しさん:2005/04/16(土) 15:05:52
>>580
selectが非ゼロ返してきて、recvするとblockするってことですか?
なんだか信じられないけど。

Unixの類ならSIGALRMでタイムアウトするようなラッパ関数を作って使うとか。
595デフォルトの名無しさん:2005/04/16(土) 15:07:57
>>594
多分違うソケット読んじゃってる
596デフォルトの名無しさん:2005/04/16(土) 15:12:13
>>592
Win2K で 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通信は無理ですよ。
597デフォルトの名無しさん:2005/04/16(土) 16:05:09
というか、ネットワーク構成図を書け
598582:2005/04/16(土) 17:08:12
ありがとうございます。

>>596
>>597
分かりました!
しかも、完璧に!
問題の原因ではなく、私の知識が圧倒的に足りないという事が分かりました。
ソケット以前の問題の様です。
本買いに逝って来ます。

>>596 さんの言われている通り、
ローカルからローカルへの接続をしようとしてたみたいです。

誠に勝手ながら@ABの質問は、無かった事にさせてください。
おそらく答えていただいても、わけが分からないので。
付き合って頂いて、ありがとうございました。
599winsock2です:2005/04/16(土) 17:20:35
socket(AF_INET, SOCK_RAW, プロトコル);
で、プロトコルをTCPにしてTCPヘッダを編集することはできないのでしょうか?
プロトコルをUDPやICMP、RAWにするとパケット自体は送信できているんですが、
TCPにするとパケットも遅れてないようです。

600デフォルトの名無しさん:2005/04/16(土) 17:24:10
>>599
遅延が無いなら問題ないでしょ

という冗談は置いといて
番号がおかしい
601599:2005/04/16(土) 17:40:01
>>600
遅れて→送れて でした。

プロトコル番号ってIPPROTO_TCPじゃないんですか??
602デフォルトの名無しさん:2005/04/16(土) 17:45:26
>>601
それじゃなくて通し番号
603599:2005/04/16(土) 17:56:36
>>602
ありがとうございます。いろいろ試してみます。
604デフォルトの名無しさん:2005/04/16(土) 18:32:59
ftpクライアント作ってます。

アクティブモードで、クライアントのデータコネクション用ソケットにサーバから接続することができるんですが、なんででしょうか?
ルータでブロックされないのかな...
605デフォルトの名無しさん:2005/04/16(土) 18:53:27
FTPを認識したルータだと、PORT以下を認識して、
自動的にポートを空け、PASVでなくても通信出来る場合がある。
606デフォルトの名無しさん:2005/04/16(土) 19:19:49
established
607デフォルトの名無しさん:2005/04/16(土) 21:19:22
特定のサーバーに頼らずに、そのシステム内で被らないポート番号を捜す方法って無いのでしょうか?
あと、出来れば外部との接続に有効なポート(NATで正しく設定されているポート)かどうかまで解れば良いんですが・・・。

やはり、一度外部との接続をして試すしか方法はありませんか?
環境はWin2k以降でWinsock2ででの話です。
608デフォルトの名無しさん:2005/04/16(土) 21:47:46
>>607
> 特定のサーバーに頼らずに、そのシステム内で被らないポート番号を捜す方法って無いのでしょうか?

bind()してみる。

http://www.iana.org/assignments/port-numbers
> The Dynamic and/or Private Ports are those from 49152 through 65535
49152移行から試すのが吉。

NATについては、ルータの設定による。
609デフォルトの名無しさん:2005/04/17(日) 09:22:21
NATで正しく設定されているポートってなんだろうね
610デフォルトの名無しさん:2005/04/17(日) 11:32:11
UPnPぐらいしかないんじゃねえのかなあ
611デフォルトの名無しさん:2005/04/17(日) 12:01:44
>>609
マッピングの勉強してこい
というか、今時初心者でもルーターのポート設定くらいしたことあるぞ。(汁
612デフォルトの名無しさん:2005/04/17(日) 12:02:15
質問です。

ネットゲームでよく見られる"ping"って何の値なんでしょうか?
日本のサーバーは20〜70
欧米のサーバー等は200〜300位の様ですが。。。

winsockを使っている事は間違い無い様です。
613デフォルトの名無しさん:2005/04/17(日) 12:27:22
またすごいのがきたな
614612:2005/04/17(日) 12:40:18
何か?
615デフォルトの名無しさん:2005/04/17(日) 13:00:19
>>612
http://web.bilkent.edu.tr/Online/Jargon30/JARGON_P/PING.HTML
↑面倒だから、これ翻訳して読んで、分からないこと聴いて。
heart beat packetの事だと思うが、ゲームによるだろ。
数値には秒単位なの?
616612:2005/04/17(日) 13:27:08
>>615
考えてみたらそうですね。。。 < ゲームによる
応答時間だと思うので、QueryPerformanceCounterを使う事にしました。
ありがとうございました。
617デフォルトの名無しさん:2005/04/17(日) 15:04:33
>>599
 Windows だと、確かどっかのバージョンだかどれかのSPだかで、
セキュリティ対策としてTCPプロトコルでのRAWソケットからの通信は
できないようにされていたような気がする。
618デフォルトの名無しさん:2005/04/17(日) 15:38:43
管理者権限で出来るでしょ。
619デフォルトの名無しさん:2005/04/18(月) 18:20:08
WindowsでQoS RSVPのサービスを動かしていたら、
アプリからQoSを通さずに直接Winsockへパケットを通す事は出来ずに
必ずQoSのサービルにパケットは食われますか?
アプリの作り次第ではQoS通さずに直接Winsockへ流せそうな気もするのですが、やっぱり無理なんですかね?
620デフォルトの名無しさん:2005/04/18(月) 22:58:04
どこで質問して良いかわからんので、ココでスマソ

グローバルIPから国名を導き出したい。
どうやりゃ良いの?

とりあえず、sageときますね(w
621デフォルトの名無しさん:2005/04/18(月) 23:14:21
>>620
市ねばいいのに。
622620:2005/04/18(月) 23:26:02
>>621
トップレベルの番号一覧が出てこねぇんだよ!
よこせ!
623599:2005/04/18(月) 23:28:11
>>617
それかも。当方XPのSP2です。管理者権限はあるんだけどなー
624デフォルトの名無しさん:2005/04/19(火) 00:41:29
>>622
ばーか、もうくるな
625デフォルトの名無しさん:2005/04/19(火) 00:42:21
>>619
適当なQoS設定しとけよ。
えぇ  し   ぉ            w       w                   
            ァ     kw    う う                      
   っ       ハ   wwお       ぇ ぇっ                    
          ァ                   ww                 
  け  とるの ハ   うは       w                          
     
627620:2005/04/19(火) 01:37:00
>>624
教えてくれよ。
マジ、分からないんだよ。
教えてくれたら、二度と来ないからさ。
628620:2005/04/19(火) 01:51:12
629デフォルトの名無しさん:2005/04/19(火) 01:52:54
>>628
やれば出来るじゃないか。感動した!
630デフォルトの名無しさん:2005/04/19(火) 02:21:51
>>628
ワロタ
631デフォルトの名無しさん:2005/04/19(火) 10:17:21
>>625
いあ、自分の知りたいのはQoSの設定の段階の問題じゃなくて、その後なのですが…
QoSの設定した後、普通のアプリならパケットはRsvpsp.dllを通ってWinsockに流れると思いますが、
Rsvpsp.dllを通さずに直接Winsockにパケットを叩き込んで、
QoSの影響を受けないようなアプリは作る事は出来ないのかって事を知りたいのですよ。
632デフォルトの名無しさん:2005/04/19(火) 12:06:55
>>623
617です。TCPがダメってのは単なる私の記憶違いでした。
↓これはどうですか?
http://support.microsoft.com/kb/884942/JA/
633デフォルトの名無しさん:2005/04/19(火) 14:43:44
Win32API質問箱板で質問したのですが、
板違いの気がしたのでこちらで再度質問させていただきます。
WininetAPIでHTTPSで通信を行い,サーバが仮証明書を利用した場合などに,
警告ダイアログボックス表示の禁止にしたいのですが、
どの関数をつかえばいいのでしょうか?
634デフォルトの名無しさん:2005/04/19(火) 14:48:04
>>633
http://support.microsoft.com/default.aspx?scid=kb;%5BLN%5D;182888
Win32APIスレが妥当だと思いますが、あそこは荒れやすいので
635デフォルトの名無しさん:2005/04/19(火) 18:33:22
634>>
ありがとうございます。
証明書問題は解決できました。
あともう一つお聞きしたいのですが、
httpsでPOST処理をやりたいのですが、
下記のHPの通りに作っても、
送信処理がうまく走りません。
ttp://support.microsoft.com/kb/q168151/
httpのポート指定だと、POSTできるし、
結果がきちんと返ってきます。
このページ以外の処理も追加しないとダメなのでしょうか?
よろしくお願いします。

636デフォルトの名無しさん:2005/04/19(火) 18:45:25
>>635
全くわかりませんが、他の方が回答しやすいように
・各APIでエラー等は返されていないか
・IE等では、そのURL (https://〜) に対するPOSTが正常に行えるのか
など書かれてみてはどうでしょうか。

漏れならまず最初はサーバ側を疑います。
637デフォルトの名無しさん:2005/04/19(火) 23:49:46
>>631
無理
638デフォルトの名無しさん:2005/04/20(水) 09:50:31
>>636
色々調べた結果、正規の証明書が発行されないページのみで、
12045のエラーが出続けていました。
証明書のキャンセル処理が走っているのが、認識されていない?ようです。
何が違うのやら・・・
サーバー側を調べてみて、
証明書関係のことももうちょっと調べてみます。
639デフォルトの名無しさん:2005/04/20(水) 14:40:10
サーバプログラムで、こっちがacceptしなくても
クライアントのconnectが完了してさらにwriteも完了し
PSHに対してACKまで返す なんてことあるの?
640639:2005/04/20(水) 14:41:33
connectが完了するまでは普通にあるから、writeというか
データのパケットもクライアントは普通に送出するか。
ということはそれに対してACK返すのも普通の出来事か。
すまん。
641デフォルトの名無しさん:2005/04/20(水) 18:22:56
WinSockのsocket関数とWSASocket関数は機能的に何が違うのでしょうか
642デフォルトの名無しさん:2005/04/20(水) 19:37:01
>>641
マニュアルみればわかるでしょ。
どうみても同じに見えない。
643デフォルトの名無しさん:2005/04/20(水) 19:53:40
>>639
TCPのACKは、あくまでもプロトコルとして相手のマシンに
データが到着した事を示す為のもので、相手のプログラムが
データを受け取った事を示す為のものでは無いから、
相手のプログラムがrecv()をコールしていなくても
相手のOSがデータを受け取ったタイミングでACKが
帰って来てもおかしくはないと思うよ。
644デフォルトの名無しさん:2005/04/20(水) 21:24:57
>>639
transparent proxyが間に挟まってたりするとそういう挙動をするね。
645デフォルトの名無しさん:2005/04/20(水) 23:58:46
>>643
出鱈目言うな。
646デフォルトの名無しさん:2005/04/21(木) 10:34:35
>>645
コネクションが確立してて、相手側の受信バッファ(ウィンドウサイズ)
にまだ空きがあれば、アプリケーション側がrecv()呼ばなくても
TCPのACKって帰って来るよね。
647デフォルトの名無しさん:2005/04/21(木) 20:20:10
なんでこのスレは適当な事をいう奴がいるんだろう
648デフォルトの名無しさん:2005/04/21(木) 23:40:53
どこにでもいるが
649デフォルトの名無しさん:2005/04/22(金) 00:15:11
>>643>>646

>>639はaccept()していなくてもといっているのがワカランか!?
>>644の言う通りだ。(言外に通常では起きないと言っている)
650デフォルトの名無しさん:2005/04/22(金) 00:31:19
「嘘を嘘と見抜けない人には、掲示板の利用は難しい」

(2ちゃんねる管理人ひろゆきの言葉)

ttp://umi.no-ip.com/simple/pdone.html?id=205
651デフォルトの名無しさん:2005/04/22(金) 03:10:24
652デフォルトの名無しさん:2005/04/22(金) 11:14:41
>> 651
やっと味方が出て来てくれた。
THXです。

>> その他の人
まぁ、一度サンプルつくってLANトレースを取りながら
動かしてみることをお勧めします。
653デフォルトの名無しさん:2005/04/22(金) 21:17:24
そんなのは常識だと思ったが。
654デフォルトの名無しさん:2005/04/22(金) 22:32:42
反論する時に実行サンプルのソースとログをだせば
すぐ済むハナシなのに
655デフォルトの名無しさん:2005/04/23(土) 10:51:40
C#でサーバプログラムを作っているのですが
TcpListenerで取得したclientに対して

NetworkStream ns = client.GetStream();
StreamReader sr = new StreamReader(ns,enc);
StreamWriter sw = new StreamWriter(ns,enc);
sr.Read();

となっているときtelnetでこのプログラムに接続し、
文字を入力すると入力した文字がエコーされてしまうのですが
Read()はエコーを返すようにできているのでしょうか?
telnetのエコーはOFFにしてあります。
656デフォルトの名無しさん:2005/04/23(土) 10:58:35
出来ているわけねー
657デフォルトの名無しさん:2005/04/23(土) 11:57:55
あふぉ
658デフォルトの名無しさん:2005/04/23(土) 17:34:30
誘導されてきました

IPヘッダをごにょごにょしたいのですが、
WinSock2のrawモードを細かく日本語で解説した物ってありますか?
Webページでも本でも、何でも構いません。
>>1の Winsock Programmer's FAQ (日本語訳) でリンクされている
ライブラリ等は使いたくありません。
宜しくお願いします。
659デフォルトの名無しさん:2005/04/24(日) 01:59:23
>>658
>>2にあるWinsock2の本。

> >>1の Winsock Programmer's FAQ (日本語訳) でリンクされている
> ライブラリ等は使いたくありません。

トロイの木馬ですか? (w
660658:2005/04/24(日) 02:18:34
>>659
どうもありがとうございました。
661デフォルトの名無しさん:2005/04/24(日) 16:42:25
???????
662デフォルトの名無しさん:2005/04/24(日) 19:09:55
>>661
?に文字化けしてるよ。
663デフォルトの名無しさん:2005/04/25(月) 20:10:56
サーバプログラム作ってるんだけど
SSH2のDSAで通信するときののプロトコルが解説されているサイトない?
664デフォルトの名無しさん:2005/04/25(月) 22:05:38
漏れも漏れも〜
665デフォルトの名無しさん:2005/04/26(火) 01:08:40
まずソース読めや。

http://www.free.lp.se/fish/rfc.txt
http://www.faqs.org/faqs/computer-security/ssh-faq/

それから「DSAで」言われても困る。
666デフォルトの名無しさん:2005/04/26(火) 01:10:40
667デフォルトの名無しさん:2005/04/26(火) 20:18:03
>>665,666
サンクス
がんばってみる
668デフォルトの名無しさん:2005/04/29(金) 20:11:50
OSはwinXPproで、UDPでブロードキャストにsendtoした
ところ10022の無効な引数となりました。

ところが、別なマシン(win2Kpro)やwinXPheだと
正常に処理されます。

winXPproのファイアーウオールの設定でしょうか?
考えられる原因は・・・。
669658:2005/04/29(金) 21:41:00
>>659
すみません、本屋でその本を見かけて立ち読みしたのですが、
生ソケットと言うタイトルで、ICMPを発射するサンプルしかありませんでした・・・
これは Winsock Programmer's FAQ (日本語訳) に載ってたのとと全く同じような
気がするのですが、もう少し詳しく解説してある書籍はないでしょうか?すみません
670デフォルトの名無しさん:2005/04/29(金) 23:43:49
>>669
何が欲しいんだ?
671デフォルトの名無しさん:2005/05/01(日) 15:56:54
各クライアントPCのセキュリティレベル項目を一定にするために、どうされていますか?
今は、各自でやってもらってます。

バッチファイルによる
control.exe inetcpl.cpl, ,1
ではコントロールアプレット→インターネットオプションまで表示されました。

ここでセキュリティレベルを一律”高”にできないでしょうか?
バッチファイルをクリックすることでアプレットの表示でなく、設定を行いたいです。
672デフォルトの名無しさん:2005/05/01(日) 15:58:10
プログラミングよりもWindows板がいいと思う。
673デフォルトの名無しさん:2005/05/01(日) 16:20:10
>>672
ありがとう。
Windows板にはどこに書いていいかわからなくって。
スレよごしてしまった。すまん。
control.exeの引数みてもないからなんらかで
直接レジストリに書き込まなきゃいけないのかなー。
674デフォルトの名無しさん:2005/05/09(月) 20:38:53
こんにちは たぶん私は何もわかってないのでが
できたら教えてください
WinSockでプロクシ経由で外部に通信の場合
WEBでしたらProxyに通信はってGET /<http://対象となるサーバー>
で、通信できるのはいいのですが
UDPとかを通信するのはどうすれば・・・
MFCのCInternetSessionでないとダメ?
そもそもプロクシ自体 HTTPとかの規格しか通さない物でしょうか?
675デフォルトの名無しさん:2005/05/09(月) 20:42:54
HTTPのプロクシなら、HTTPとFTPあたりが普通。
よくてHTTPSということにしたTCPしか通さない。
UDPを通すようなプロクシは聞いたことがない。
676デフォルトの名無しさん:2005/05/09(月) 21:02:56
>>675
ありがとうございます
やはりそうですか プロクシの設定で
このポートはスルー とかってできるんでしょうか?
677デフォルトの名無しさん:2005/05/09(月) 22:36:38
RouterとFirewallとGateway(Proxy)の違いが判らない人ですか?
Gatewayは中継するProtocolを知っている必要があります。
678デフォルトの名無しさん:2005/05/10(火) 01:40:45
レイヤ IV
679デフォルトの名無しさん:2005/05/10(火) 08:32:46
>>677
すみません、区別ついてないです
ただ、Gatewayはファイアウォールと違って
内部の効率を上げるのが目的と認識しているので
キャッシュする必要の無いプロトコルはスルーするのかな?
と思っただけです
680デフォルトの名無しさん:2005/05/10(火) 08:55:06
gatewayはレイヤー7のプロトコル中継です。

>>675
> UDPを通すようなプロクシは聞いたことがない。

http://www.delegate.org
681デフォルトの名無しさん:2005/05/10(火) 08:55:33
そもそもDNSサーバがそう。
682デフォルトの名無しさん:2005/05/10(火) 09:06:33
squid
683デフォルトの名無しさん:2005/05/10(火) 19:03:46
>>677
Router も Gateway じゃないの?
IGP とか EGP とかいうくらいだから
684デフォルトの名無しさん:2005/05/10(火) 19:30:12
ルーター⊂ゲートウエイ
プロキシ⊂ゲートウエイ
って事だな。
685デフォルトの名無しさん:2005/05/11(水) 00:24:21
>>680
> 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.

686デフォルトの名無しさん:2005/05/11(水) 01:21:39
ゲートウェイとは、似た機能を持つが異なった実装を持つネットワークの間で
データを伝送する装置またはプログラムのことである。
687デフォルトの名無しさん:2005/05/11(水) 06:33:16
そゆことだね。

>>680
ちゃんとアプリケーションゲートウェイって言わないと
通じないよ。
688デフォルトの名無しさん:2005/05/11(水) 10:04:21
CもしくはC++を使ってのネットワークプログラミングの入門書を紹介していただけないでしょうか
689デフォルトの名無しさん:2005/05/11(水) 15:05:28
winsockですけどサーバー側が先に
closesocketしてもいいですよね?

サーバー側がsend->closesocketとしてて
クライアント側がrecv->closesocketとしてるんですけど
たまにrecvがSOCKET_ERRORを返すみたいなんです。
690689:2005/05/11(水) 15:14:47
サーバー側が1バイトsendしてすぐにclosesocketしてるのが
まずいのでしょうか?1バイトって小さすぎ?
sendしてSleep(1000)、その後closesocketにしてみようかなぁ
691デフォルトの名無しさん:2005/05/11(水) 18:18:58
>>688
>2
692デフォルトの名無しさん:2005/05/11(水) 19:17:09
他人の過去の資産の不具合追ってます。が、そもそもネットワークプログラミングが
よくわかっておらず、漠然とした質問になっちゃいますが、ヒント頂けると有難いです。

XPのSP2をあてたら動かなくなった、ソケット通信処理があります。
可能性として考えられるのは、どの辺りでしょうか・・・
Windowsファイアウォールは切ってみたりもしましたが関係なさそうです。
693デフォルトの名無しさん:2005/05/11(水) 19:31:18
性的リンクしない
694692:2005/05/11(水) 19:32:04
書き忘れました。環境はVC++6(SP3)です。
また、同じプログラムが正常動作するXP SP2環境もあり・・・
# どうもウィルスバスターの最新版が入っているとダメなような・・・
# 関係無いと思いますが。バスターのファイアウォールも切ってます
695ヽ(´ー`)ノ ◆.ogCuANUcE :2005/05/11(水) 19:53:04
>>694
まず問題の切り分けをすること。
SP が原因なのか、ウィルスバスターが原因なのか。あるいは他か。

アドバイスできるのはそれだけ。
696デフォルトの名無しさん:2005/05/11(水) 19:55:12
>690
shutdown(SD_SEND)して、recvが0を返すまで待て。
697デフォルトの名無しさん:2005/05/11(水) 20:12:41
>>695
すみません、バスターの件は余計でしたね。
SP2適用後に動かなくなったので(バスターはその前から入ってた)
SP2が原因というか、トリガーであるのは間違い無いです。

ひとまずは、>>693さんのいうところを試してみます。
# loadlibraryしてないので、静的リンクとみていいですよね・・・?
# はいすみません、VCも初心者です・・・・(つд⊂)
698デフォルトの名無しさん:2005/05/11(水) 20:34:23
SP2 になると、RAWソケットが Admin 権限がないと開けなくなるとか
なかったっけ?
699デフォルトの名無しさん:2005/05/11(水) 22:34:32
age
700デフォルトの名無しさん:2005/05/11(水) 22:36:11
>>697
おれの会社ではバスターアンスコ運動が始まってるぞ
しかし対抗馬は、悪名高い某しまんてっくだ
701デフォルトの名無しさん:2005/05/11(水) 22:43:58
とりあえず、スニッファでも仕掛けとけ。
APIの戻り値を無視しているなら氏ね。
702デフォルトの名無しさん:2005/05/11(水) 22:49:21
トレンドマイクロ、x64版をさくっと出せば
失ったユーザーを多少は回復できる見込みもあるんだけど
今は無理だろうね。

・・・スレ違い失礼。
703デフォルトの名無しさん:2005/05/12(木) 12:29:16
704697:2005/05/12(木) 13:43:57
みなさんレスありがとう御座います(TдT)
>>703のリンク先と格闘中ですので・・・取り急ぎお礼まで・・・
705デフォルトの名無しさん:2005/05/13(金) 01:16:08
環境依存の質問だとは思うのですが、WinSockで大きいデータを分割し
て送る場合、どれくらいのサイズが良いと言う目安はありますでしょうか?

一応ADSL1M以上の環境限定で、500バイトぐらいに分割して送って
います。この500バイトという数字があまりにも小さすぎるor大きすぎ
るということはありますでしょうか?そんなに厳密なものを求めている
わけではないので、ある程度のずれは気にしないのですが…
706デフォルトの名無しさん:2005/05/13(金) 01:22:36
パケットサイズとかでいいんじゃないかな
707デフォルトの名無しさん:2005/05/13(金) 01:47:52
>>706
そのあたりの具体的な数字が見つからずに質問しました。
同じような環境でプログラムを組んで、何かの資料や経験上から
具体的な数字が分かる方がいないかなと…

テンプレのリンク先で別に8KBという数字は見つけたのですが…
708デフォルトの名無しさん:2005/05/13(金) 02:12:41
mtu
709デフォルトの名無しさん:2005/05/13(金) 02:19:24
って、よく考えたら
「小さく分割して送る」と考える時点で
socketを理解してないような。
710デフォルトの名無しさん:2005/05/13(金) 02:25:14
分割は再送を考えてるのか?
でもそんな心配もイラン品
711デフォルトの名無しさん:2005/05/13(金) 02:42:43
補足ですが、正確にはすでにあるでかいファイルを分割するので
はなく、もともとファイル自体が細切れになっていて、それを500
バイト単位でまとめて送っている状況です。

Winnyなどが暗号化して細切れになったファイルを送っているのに
近い感じです。

そういう経験があって、具体的な数字が分かる方がいらっしゃると
良いのですが…そんなに簡単にいませんよね…
712デフォルトの名無しさん:2005/05/13(金) 03:19:06
だから500バイトを100回sendして
500バイトのパケットが100個届くと考えている点が
ネットワークプログラミングの初歩を理解してないって事だよ。
713デフォルトの名無しさん:2005/05/13(金) 03:35:51
>>705
一体何が知りたいのかさっぱり判らんよ。フロー制御がしたいのか?
その500バイトってのは1秒に一回送ってるの?
だったら小さすぎだけど、1ms毎に送ったりしてるなら大きすぎに思える

自分と相手との明確な回線速度は判らないから、1M限定で考えるなら
1割引して120KB/sくらいでいいんじゃないか。
もっと適応性を持たせたいなら、送る量をだんだん増やしていって、
send時にブロックしはじめたら、そこを限界あたりにするとかさ。
714デフォルトの名無しさん:2005/05/13(金) 07:01:42
TFTPか何かか?
TCP使うとは書いてないしな
715デフォルトの名無しさん:2005/05/13(金) 07:40:19
>>705
・サイズを気にする理由が書いてない。よって目的不明。
・プロトコルが書いてない。よって技術的検討不能。
・環境が書いてない。よって技術的検討不能。
716デフォルトの名無しさん:2005/05/13(金) 11:09:44
>>711
答えだけ簡単に書くぞ。

・送る側は何も気にせず全速力で500バイトでも5000バイトでも
好きなバイト数ずつsendすればよろし。CPU能力がボトルネックに
なりそうなら、できるだけ大きい単位で送る。
移植性等を考えないなら、1回のTransmitPacketsで全て送る。
・受信する側は出来るだけ大きい単位で recv して、その後処理する。
頭4バイトにサイズがあるから、などといって4バイトだけrecvするとか
は しないように。
717デフォルトの名無しさん:2005/05/13(金) 12:28:28
>>713>>716
無茶な質問に丁寧に答えていただき有難うございます。参考にな
りました。
718デフォルトの名無しさん:2005/05/13(金) 14:12:01
スレ違いならすみません
Winsockにて
Proxy越しに通信してますが
リクエストヘッダに
Proxy-Connection: Keep-Alive
指定してますが レスポンス後に クライアント-> Proxy間で
通信がきられます。 Proxy->オリジンサーバーでは
Keep-Aliveされてるんですが
この場合、毎回ソケットを作成して通信しないといけないのでしょう?
719デフォルトの名無しさん:2005/05/13(金) 20:40:00
Keep-Aliveたんがちゃんと機能しないのおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
720デフォルトの名無しさん:2005/05/14(土) 01:33:22
>>719
やさしくしてやれ
あと、ときどき思い出させるんだ
721デフォルトの名無しさん:2005/05/14(土) 02:32:29
rfc嫁
722デフォルトの名無しさん:2005/05/14(土) 19:09:25
RFCにKeep-Aliveヘッダの説明はない罠
(昔そんなものがあったねと書いてるだけ)
723デフォルトの名無しさん:2005/05/14(土) 20:53:49
>>722
だからそういう事が言いたいんだろ?
KeepAliveの動作なんて実装依存。
>>718 が環境も書かないアホな以上どうしようもない。
書いたとしてもどうしようもないけどな。
724デフォルトの名無しさん:2005/05/15(日) 20:36:11
winsock2つかってarpパケットを送信するプログラムって作れますか??
ウィンドウズでは無理なのかな・・・
725デフォルトの名無しさん:2005/05/15(日) 21:43:39
RAW使ったら出来るかもね
726724:2005/05/16(月) 00:11:14
ありがとうございます。やってみます!!
727デフォルトの名無しさん:2005/05/17(火) 22:39:54
初心者です
IEでHPとか見る時って上のレイヤーからどんな風にプロトコルが使われているのですか
728デフォルトの名無しさん:2005/05/17(火) 23:12:19
ソケットってあるけど、どんなプロトコロ使用しているの?
TCPで通信。とか、UDP。とか、TCP/UDP
ってのぐらいしかしらないんだけど、ソケット使うとき
設定とかしないよね・・・?
729デフォルトの名無しさん:2005/05/17(火) 23:18:49
するよ
730デフォルトの名無しさん:2005/05/17(火) 23:41:42
unix ドメインとか
731デフォルトの名無しさん:2005/05/17(火) 23:42:52
TCPのPは何のPですか?
732デフォルトの名無しさん:2005/05/17(火) 23:43:53
TCP の P
HTTP の P でも UDP の P でも無いよ
733デフォルトの名無しさん:2005/05/17(火) 23:46:08
なぞなぞですか
734デフォルトの名無しさん:2005/05/17(火) 23:49:05
いろはのいの字はどーかくの?
735デフォルトの名無しさん:2005/05/17(火) 23:51:22
こーしてこーしてこーかくの。
736デフォルトの名無しさん:2005/05/17(火) 23:53:49
バークレイ厨のおかげでスレのレベルが下がってるな
737デフォルトの名無しさん:2005/05/18(水) 18:02:25
この前もここで質問した者ですが、中々良いドキュメントが見つかりません。
Cで、Windows2k/XPでIPを偽装しTCP/UDPパケットを送信したいのですが、
何か良いのはありませんでしょうか・・
738デフォルトの名無しさん:2005/05/18(水) 18:27:34
今時、srcipなんか偽装しても、NATとかISPの壁があるとおもうので、
インターネットに対しては使えないと思うが、用途は何?
739デフォルトの名無しさん:2005/05/18(水) 18:47:21
LAN内で試してみたいだけです、RAWソケットを
740デフォルトの名無しさん:2005/05/19(木) 01:20:54
プログラミングとは直接関係ないのですが…

Linuxで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以外のデバイス)を使ってパケットを送信することなので、
これは解決策にはなりません。

どなたかお知恵をお貸しください。
741740:2005/05/19(木) 01:21:42
以下は/etc/sysconfig/network-scripts/ifcfg-loの内容です
=========== 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
================================
742デフォルトの名無しさん:2005/05/19(木) 01:48:45
source addressもbind(2)しろ。
man 7 ipしてINADDR_ANYも調べてね。
743740:2005/05/19(木) 02:02:11
>>742
申し訳ありません。言葉が足りませんでした。
127.*.*.*へパケットを送信するのは私の作るプログラムではなく、sshやftpやtelnet等任意のアプリケーションなんです。
そのパケットを受け取って加工して利用するプログラムを作っています。
744デフォルトの名無しさん:2005/05/19(木) 02:37:48
>>743
Linux板言って、iptableの使い方聞け。
745デフォルトの名無しさん:2005/05/19(木) 02:56:08
>>744
iptablesを使って作っています。
送信元=送信先だとIPアドレスだけでは送信方向を判別できないので、
IPアドレスだけでフィルタリング条件を書けないのが不便なので困っています。
ポート番号をフィルタリング条件に利用する場合のプログラムは完成しています。

あらゆるアプリケーションに対して固定の送信元アドレスを強制するのは不可能ってことですかね?
746デフォルトの名無しさん:2005/05/19(木) 07:18:55
>>745
iptablesにパケットが通らない状態でどうやって制御すんのさ?
747デフォルトの名無しさん:2005/05/19(木) 07:20:23
一番の疑問はなぜそんな事をしたいのさ?
748デフォルトの名無しさん:2005/05/19(木) 08:16:45
MSNMessengerの様に、有効なネットワークがあるかどうかを判別するにはどうしたらよいのでしょうか?
ネットワークに接続したときに何かメッセージが来るのでしょうか?
749デフォルトの名無しさん:2005/05/19(木) 11:48:19
wininetでGETリクエストをメッセージ付きで送信する時は、
HttpSendRequestにPOST処理と同じようにメッセージを渡せばいいのでしょうか?
それとも他の方法を使わないとダメでしょうか?
750デフォルトの名無しさん:2005/05/19(木) 16:07:53
windows98上でcygwinのgcc使ってネットワーク系のプログラム作ってるんだが
データリンク(ethernet)を扱うにはどうすればいいんでしょうか
ソッケトでは無理らしいし・・・
751デフォルトの名無しさん:2005/05/19(木) 16:10:13
>>745
> あらゆるアプリケーションに対して固定の送信元アドレスを強制するのは不可能ってことですかね?

それだけなら 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 ではなく、カーネル内部のルーティングに関する部分。
ざっと見たけど、どの条件にマッチしているのか俺の知識では追いかけきれなかった。
752デフォルトの名無しさん:2005/05/19(木) 16:19:36
Ford-Fulkersonって偉大ですね。
50年も前にあんな理論を導くとは。
753デフォルトの名無しさん:2005/05/20(金) 18:24:08
WSAAsyncSelect() を使用した非同期通信を行っていますが、
1000バイト以上溜まった受信データをFD_READイベントで引き取る際、
500バイト読み出し、としてrecv()後、次のFD_READがポストされるまでに
500ms近くかかっているようなのですが、この時間って、
変更できないものでしょうか??
754デフォルトの名無しさん:2005/05/20(金) 21:42:33
マイコン(ルネサス製R8C/TINY)にIrLAPを実装しようとしています。
IrLMP、TinyTPも実装しようとしてますが、まずは手始めにIrLAPを
考えています。

Irのトランシーバーモジュールはアジレント製かシャープ製かを採用
するつもりですが確定ではありません。

当方、プロトコルドライバー、あるいはプロトコルスタックの実装経験
がありません。

まずは、リンク層の動作を学びたいと考えてます。

そこで、参考になりそうな下記のサイトを見つけました。

Ethernetの動作過程
www.ese.yamanashi.ac.jp/~itoyo\lecture\network\network07\ethernet.htm

ここでは、『回線監視』、『送信』、『受信』の大まかな流れが解説されて
ます。

もう少し詳しい解説が欲しいのですが、適当な書籍、WebSiteを教えてください。
よろしくお願いします。

www.irda.orgよりIrLAPの仕様書(英文)は入手済みですが、なにぶん
英語が苦手でスラスラ頭に入ってこない状態です。
755デフォルトの名無しさん:2005/05/20(金) 23:18:34
巨大ファイルをソケットで送受信したいんですが、
途中で切断された場合に備えてリトライ付けるべきでしょうか
756デフォルトの名無しさん:2005/05/20(金) 23:54:46
>>755
好きにしろ
757デフォルトの名無しさん:2005/05/21(土) 01:32:20
ひどい。。
758デフォルトの名無しさん:2005/05/21(土) 08:21:41
リトライは不要。それはただのおせっかい機能だよ。
759デフォルトの名無しさん:2005/05/21(土) 08:47:05
つーか仕様次第。

デーモンみたいに裏で稼働してる奴なら自動で数回リトライしてみる
事もあるし、リトライ可能な作りにはしたけど疎通試験段階で「やっぱ
無くていい、つーかあると処理キュー埋まってまずいからリトライ回数
0に設定」なんて事もあるし、普通のGUIアプリならエラーダイアログ
出してリトライするかユーザーに選択させる事もあるし。

まぁ後々「やっぱ必要だわ」となる可能性があるなら、リトライ可能な
作りにしておくのはいいと思うけど。
760デフォルトの名無しさん:2005/05/21(土) 13:47:16
いや、やっぱりいらないよ。自動リトライのような甘ったれた機能はダメ人間の育成につながる。
761デフォルトの名無しさん:2005/05/21(土) 16:02:42
リトライよりも中断したとこからの再開だろう、有用なのは
762デフォルトの名無しさん:2005/05/21(土) 20:18:10
連結リストをネットワークを通じて同期させたいんだけど、
ttp://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.15
で言われているようにマシンが違うからセルを指定するのにアドレスが使えない。
連結リストの各セルに順序を示す整数を持たせることも考えたけど
挿入の度にそれ以降のセルの整数を更新させないといけないし…

何か良い方法ないですか?
763デフォルトの名無しさん:2005/05/21(土) 20:23:00
リストに対するオペレーションのログを取って、相手先のマシンでそのログを適用するとかは?
764デフォルトの名無しさん:2005/05/21(土) 20:27:52
ハッシュをキーとした連結リスト作るとかは駄目かな?
765762:2005/05/21(土) 20:59:58
すいません。質問の仕方が悪かったようです。
リストに対する挿入・削除のときにポインタでアドレスを直接指定することが出来ないので
何か間接的な方法でセルを指定できないといけなんですよね。

今考えているのは
リストのセルを追加するタイミングでセルごとに一意な共通の整数値を割り振って、
その整数値に対して挿入・削除を実行すれば連結リストの構造を保ったまま通信が出来る、というものです。

要するに論理アドレスみたいなものを導入するという…
766デフォルトの名無しさん:2005/05/21(土) 21:02:58
論理アドレスの管理や探索が大変になりそうな感じだけど、
これがベストなのかな?
767デフォルトの名無しさん:2005/05/21(土) 21:07:03
>>763
>リストに対するオペレーションのログを取る
リストに対して例えば挿入を指示するとき、そのセルへのポインタを引数として渡すよね。
異なるマシン間でポインタは一致しないから、それだとダメっぽいけど
768デフォルトの名無しさん:2005/05/21(土) 21:07:19
>>762
あーそういう問題があるんだ
昔ネットワーク上でソート済みのListを受け渡してたら
なぜか、受け側でソートが元に戻ってたんだよな
そういう理由があったのか
769デフォルトの名無しさん:2005/05/21(土) 21:14:10
論理アドレスはどういうデータ構造にするの?
指定されるたびに一々走査したら効率悪くない?
770デフォルトの名無しさん:2005/05/21(土) 21:20:02
>>767
リストなんだから、直アドレスが分からなくてもオペレーションの書き出しは
可能でしょ
771770:2005/05/21(土) 21:22:28
リストを探索したくないというなら知らない
772デフォルトの名無しさん:2005/05/21(土) 21:28:28
パッソプチプチプチトヨタ
773770:2005/05/21(土) 21:43:56
>>765
そのやり方なら ID はセル内に持たせるのではなく、外にアドレスマップ作った方が
キャッシュを有効に使えるかもしれないね
774デフォルトの名無しさん:2005/05/22(日) 07:08:13
インターネット接続状況を取得する方法を教えてください
775デフォルトの名無しさん:2005/05/22(日) 07:31:23
なんか重要な更新インストールしたらRAWソケットで送信ができなくなった。
ipconfigでv6のアドレスが出てくるようになったし・・・
776デフォルトの名無しさん:2005/05/22(日) 11:47:57
>>774
どこかにping投げる
777デフォルトの名無しさん:2005/05/22(日) 16:09:35
スレ違いだとは思いますが、C/C++の宿題を片付けますスレで
ネットワークプログラミングの課題をやってもらおうと思って書いたのですが、
なかなか難しいらしいので、ここにも書いてみます。
http://pc8.2ch.net/test/read.cgi/tech/1115794784/252
http://pc8.2ch.net/test/read.cgi/tech/1115794784/477
もし、やってくれる神がいたらと思ってます、お願いします!
778デフォルトの名無しさん:2005/05/22(日) 16:18:54
難しいんじゃなくてスルーされてるだけじゃん
聞き方が悪かったんじゃないの?
779デフォルトの名無しさん:2005/05/22(日) 16:23:31
やってやるよ。でも結構めんどいな。火曜まで待ってくれ。
780デフォルトの名無しさん:2005/05/22(日) 19:25:37
>>775
漏れは1とか255とか17とか登録されたプロトコルだけしかパケットが送信できない。
781777:2005/05/22(日) 20:01:01
>>779
マジですか!?ありがとうございます!待ってます!!
782デフォルトの名無しさん:2005/05/22(日) 23:20:24
>>781
おい信じるなよ。宿題スレ以外で宿題やってくれる香具師なんぞいないぞ。
783デフォルトの名無しさん:2005/05/23(月) 07:52:05
やってやるよ。でも結構めんどいな。週末まで待ってくれ。
784デフォルトの名無しさん:2005/05/23(月) 08:06:37
よくわからんが、自分でやって分からないところを質問したらどうなんだ
785デフォルトの名無しさん:2005/05/23(月) 16:43:24
JEDI Server ってなんですか?
786デフォルトの名無しさん:2005/05/23(月) 17:13:15
フォースの使えるサーバー
787デフォルトの名無しさん:2005/05/24(火) 00:06:40
つかぬことをお聞きしますが、UNIXドメインのソケットで
スレッド間通信をすることができるのでしょうか?
ぐぐっても、スレッド間通信にソケット通信は出てこないようなので。
788デフォルトの名無しさん:2005/05/24(火) 00:07:52
>>787
やってみたらいい
789デフォルトの名無しさん:2005/05/24(火) 00:21:25
example.ne.jp って例のための予約ドメインだと思うけど
こんな感じの 例のための予約IP ってあるかな
790デフォルトの名無しさん:2005/05/24(火) 00:45:10
>>789
http://www.example.com/
実際に行って読んでみ。
791デフォルトの名無しさん:2005/05/24(火) 00:48:12
>>789
これ読むと、192.0.2.0/24 を使えってことらしいよ
private なら何でも良さそうだけど

http://www5d.biglobe.ne.jp/~stssk/rfc3330j.html
792デフォルトの名無しさん:2005/05/24(火) 01:12:59
>>787
できないわけないだろ?
793777:2005/05/24(火) 23:00:43
>>779
火曜日ですよ、まだですか?

[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
794デフォルトの名無しさん:2005/05/24(火) 23:37:55
>>777
騙されてるのに気が付いてない馬鹿(´ー`)
795デフォルトの名無しさん:2005/05/25(水) 01:31:20
とりあえず、授業中にあったらしい細かい仕様の説明の内容を教えれ。
796779:2005/05/25(水) 01:39:38
>>793
ごめんごめん。おれアメリカに住んでるから PST での火曜日ね。
797779:2005/05/25(水) 01:42:44
あ、今夏時間だから PDT だね。
あと 14時間くらいだからマターリしてな。今ごりごりコーディング中だから。
798デフォルトの名無しさん:2005/05/25(水) 01:50:27
>>779
おまい、信用されてないらしいよ。
http://pc8.2ch.net/test/read.cgi/tech/1115794784/967
799デフォルトの名無しさん:2005/05/25(水) 02:00:10
これって、画像、素材用意しないといけないのじゃ...
800デフォルトの名無しさん:2005/05/25(水) 07:23:30
まあ普通に頼んだ側が悪いな
801デフォルトの名無しさん:2005/05/25(水) 11:13:35
>>796
何で武蔵工業大学(MITw)がアメリカにあるんだよ!!
802デフォルトの名無しさん:2005/05/25(水) 20:30:42
Win2kでVC++6とwinpcapを使ってパケットモニタを作ろうとしているのですが、受信したパケットを
IPとかARPとかに仕分けるところではまってます。

参考にしている本では受信してきたパケットの先頭をstruct ether_headerなる構造体に
キャストして、メンバのether_typeで判定しているのですが、VCのinclude以下にあるファイルを
すべてgrepしても該当する構造体が存在せず、また、winpcapにも該当する構造体が存在せず
コンパイルできません。
参考書は「基礎から分かるTCP/IPアナライザ作成とパケット解析 第2版:小高知弘:オーム社」で、
中に書いてあるコードはLinux/FreeBSD対応とのことです。
よって、VCではそのままでは動かないのは分かっているのですが、ether_headerなる構造体と
同等のものが提供されていないか、されているならなんと言う名前なのか教えていただけないでしょうか
803デフォルトの名無しさん:2005/05/25(水) 21:17:06
イーサネットのヘッダなんかWinとLinuxで違うわけもないんだから、
Linuxのほうのソースから引っ張ってくればいいと思うが。
804777:2005/05/25(水) 21:42:39
>>799
http://uppp.dip.jp/src/uppp1483.zip
ここに全部あります。

>>796-797
頑張ってください!
805デフォルトの名無しさん:2005/05/25(水) 21:55:34
>>802
ちったー探そうぜ。
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」なんて書き込みするんじゃないぞ。
806デフォルトの名無しさん:2005/05/25(水) 22:03:08
struct ipなる構造体と(ry
807805:2005/05/25(水) 22:08:24
>>806
(# ゚Д゚) ムッキー
808デフォルトの名無しさん:2005/05/25(水) 22:12:21
おまいら、すまんこ。
809デフォルトの名無しさん:2005/05/26(木) 10:41:22
メールのUIDLの取得方法を教えてください
810デフォルトの名無しさん:2005/05/26(木) 12:02:38
>>809
pop3で接続してUIDLリターン

なんてったってIDOL
811デフォルトの名無しさん:2005/05/27(金) 11:21:10
ネットワーク障害のテスト用に
やたらと遅延したりパケットを失わせることができる
ブリッジを作成したら、売れますか?
812デフォルトの名無しさん:2005/05/27(金) 11:42:07
残念ながらもう売っているよ。
813デフォルトの名無しさん:2005/05/27(金) 12:03:46
そういうブリッジには日勤教育が必要
814デフォルトの名無しさん:2005/05/27(金) 13:22:24
>>812
マジですか
作るの面倒なのでそれはありがたい
815デフォルトの名無しさん:2005/05/27(金) 15:33:08
なんかソフトウエアでそんなのあったような
816デフォルトの名無しさん:2005/05/27(金) 17:33:37
FreeBSD bridge
で検索すると、わらわら出て来るよ。
817デフォルトの名無しさん:2005/05/27(金) 17:50:39
ネットワーク シミュレータ パケットロス
で検索すると、わらわら出て来るよ。
818デフォルトの名無しさん:2005/05/28(土) 01:16:39
サーバアプリ作ってまして、
不正なクライアントということが判った後に
通信をその時点で打ち切りたいんですがshutdown/closeで良いですか?
819デフォルトの名無しさん:2005/05/28(土) 02:04:03
FAQサイトが見れねーんだけどよ?
820デフォルトの名無しさん:2005/05/28(土) 02:07:18
俺は見れたんだけどよ?
821デフォルトの名無しさん:2005/05/28(土) 02:15:01
>>818
OK
822デフォルトの名無しさん:2005/05/28(土) 02:30:07
やっぱみれねーぞゴルァ
823デフォルトの名無しさん:2005/05/28(土) 09:30:54
他のところをみろよ。
824デフォルトの名無しさん:2005/05/28(土) 11:31:21
LinuxからWindowsに1パケット(1500B以下)だけ送ると2パケット以上送るより
処理が5倍ぐらい遅いのですがなぜなのでしょうか?
825デフォルトの名無しさん:2005/05/28(土) 11:35:36
>>824
どうやって、測ったん?

まずは、そこから検証してみようじゃないか?
826デフォルトの名無しさん:2005/05/28(土) 11:53:40
>>824
Nagleアルゴリズム; TCP_NODELAY
http://www.linux.or.jp/JM/html/LDP_man-pages/man7/tcp.7.html

>>825
お前みたいなの、うざいねん。
827デフォルトの名無しさん:2005/05/28(土) 13:17:43
>824
・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が実装されていない。
828デフォルトの名無しさん:2005/05/28(土) 13:34:16
環境は、光回線+WebCasterにDELLのノート2台接続しています。
余計な機器を間にはさんだりなどはしていないです。
簡単なHTTPのデータを投げてそれを相手側で取得するようなプログラムを作成
しています。Windows同士だと400Bのデータが最大55msec平均38msecで送受信されます。
Windows/Linuxだと最大で170msecで送信がなされ平均150msecで送受信されます
829デフォルトの名無しさん:2005/05/28(土) 15:03:57
Linuxの糞さ加減は今に始まったことではないが、
こうしてデータが出てくると「やっぱり乞食OS・・・」と思ってしまう
830デフォルトの名無しさん:2005/05/28(土) 23:10:32
>>829
Linuxが貧乏OSだってそれで商売してる人には関係ないよ。
アホクライアントがLinux使いたいって言えば、それだけで
Windowsよりも高い開発費と保守費がゲットできるんだ。
だからおれはLinuxは大好きだぜうぇっへっへ
831デフォルトの名無しさん:2005/05/29(日) 00:45:35
>>827
>俺の予想→LinuxにTCP_NODELAYが実装されていない。
なんでこんな予想が出てくるか理解に苦しむ。

>>828
で、TCP_NODELAYは試したの?
832デフォルトの名無しさん:2005/05/29(日) 13:12:06
winsockのWSAAsyncselect()での非同期というものがよくわかりません。
lEventで指定したものだけが非同期になるんですか?
それとも、lEventというのは飛んでくるメッセージを指定するだけのものですか?

あと、非同期でのsend()の方法がよくわかりません。
FD_WRITEってどういうときに飛んでくるのか、MSDNの説明だといまいちわからないんですが。
送信可能なときというのがよくわからない。
send()が終わったときに飛んでくるのではないんですか?

非同期で、

int x ;
char *buf = (char *) malloc(100) ;
x = send(s, buf, 100, 0) ;//帰ってくる値が100より小さかった場合、差分をもう一度sendしないといけないの?

//malloc()したメモリはここですぐにfree()していいの?
833デフォルトの名無しさん:2005/05/29(日) 16:14:31
>>832

>lEventで指定したものだけが非同期になるんですか?
NO
setsockoptでSO_RCVTIMEOやSO_RCVTIMEOを0にすると非同期になる。

>それとも、lEventというのは飛んでくるメッセージを指定するだけのものですか?
YES

>送信可能なときというのがよくわからない。
文字通り送信可能なとき。バッファに空きが無くて、sendされてもデータを受け取れないときや、
送信側のpeerが切断されているときは発生しない。

>//malloc()したメモリはここですぐにfree()していいの?
かまわない。
834832:2005/05/30(月) 00:27:35
>>833
ありがとうございます。

もうひとつ、
send()って、一度に送れるデータ量って決まっているんですか?
それとも、何十MBだろうと一気に送っていいものなの?
835デフォルトの名無しさん:2005/05/30(月) 01:16:27
>>834
よい。
836デフォルトの名無しさん:2005/05/30(月) 01:39:16
あまり大きいとエラーになるけどね
837デフォルトの名無しさん:2005/05/30(月) 02:38:33
戻り値はちゃんとチェックしろよ。
指定したサイズ以下しか送られない場合もあるぞ。
838デフォルトの名無しさん: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 をなのる各種のプロセス?がなにを
どのようにしているのか調べられず、困ってしまいます

839デフォルトの名無しさん:2005/05/30(月) 06:20:03
ウイルスの症状は、突然マウスフォーカスが定まらなくなり、
画面の下のメニューバー?がちらちら動きだし、なおかつ不特定多数の
ウインドウやプロセスが起動しようとして画面上で暴れる、というものです。
マウスフォーカスのコントロールを失っているため、システムモニタで
調べたくても調べられず、キーボードフォーカスも失っているため、
わたしのしっている数少ないコマンドも使えません

私の環境に付いて、ほんらいならもっと詳しく述べるべきでしょう。
でも私の今の状況では正直、UNIX系OS を通じたhttpアクセス全部が
信頼できず、したがって linux(ver2.0以上) & kde としか
申し上げられないという事をお詫びしておきます。
840デフォルトの名無しさん:2005/05/30(月) 06:27:24
>>838
man kde とかやっても、kdeinitをなのる各種のプロセス?がなにを
どのようにしているのか調べられず、困ってしまいます
説明がたりませんでした。
それは、そうやっても、マニュアルとはつながっていないためです
雑誌付属のCD-ROM(当時)のディストリビューションだからでしょうか、
商用ディストでないのに、(kdeの)ソースコードすら付いていないのです
841デフォルトの名無しさん:2005/05/30(月) 09:10:05
> プログラミングの立場としてではなく、どちらかと言うとユーザの立場から
> 質問します。

激しく板違い
犬板池
842デフォルトの名無しさん:2005/05/30(月) 09:11:46
- アプレット系ウイルスってどういうものだと思っているの? 説明してみ
- httpアクセス全部が信頼できない理由は何? なんでアプレット系ウイルスで
 http が出てくるの?
- httpアクセス全部が信頼できない場合は OS 名を書かなくてよい、という理論が
 わけわからん。
- (kdeの)ソースコードが付いてなくても何も問題はない。つーかおまいソース
 あったって何もできないでしょ。
- スレ違い。
843デフォルトの名無しさん:2005/05/30(月) 11:32:04
httpについて調べようと思ってhttpでI'm feeling luckyでググったら変なところに飛ばされました。
844デフォルトの名無しさん:2005/05/30(月) 11:42:57
http規格にはパグが居るよ。
最初のリクエストヘッダの前に、生ソケットのICMPで
相手にキューの準備を要求するんだけど、そのときに、
もしも前のhttpパケットの最後のバイト値が、0x450xff0xffだとすると、
それが、次のパケット要求になるので、
もしもキュー要求の最初のバイト値が同じだと、
直立するレッサーパンダよりもパグのが見つけにくいよ。
845デフォルトの名無しさん:2005/05/30(月) 11:45:07
846デフォルトの名無しさん:2005/05/30(月) 12:59:23
> 最初のリクエストヘッダの前に、生ソケットのICMPで
> 相手にキューの準備を要求するんだけど

キティガイ?
847デフォルトの名無しさん:2005/05/30(月) 19:42:47
>>839

wheel 付マウスの設定の X に
あとから 3 ボタンマウスを繋ぎ替えたときに
同じような症状になったことがある。

とりあえずマウス換えてみそ。

いずれにせよすれ違いだが。
848デフォルトの名無しさん:2005/05/30(月) 20:36:46
先程すれちがいしてしまったのはBokuです。
>>847
3ボタンのwheel付きマウスは使っていますがつなぎ替えた事は無いのですが。

/home/katyo/.kde/share/config/
の下にリソースファイルなどを書き込むのは、Kdeプログラムの何と言う
関数がかかわっているのでしょうか?
せめて .c や .h, .cpp 名が分かれば、KDEホームページのCVSで
(バージョンは違うのですが)ソースを覗いてみたいと思います

そこのフォルダ下に不審な(?)ファイルがあるのですが、確信が無いため取り除けません
"ブラウザ名称: 英数値列40個くらい" という名称です
末尾に"rc"もつかず、そんなファイル名なので不審に思いました
849デフォルトの名無しさん:2005/05/30(月) 20:42:38
だまされたと思ってマウス替えれ
850デフォルトの名無しさん:2005/05/30(月) 21:05:29
>>849
842ですが、マウス交換を検討してみようと思います。

ところで
ここで netstat コマンドの出力で生成される UNIX Domain Socket の出力項目に関する
質問をするのは、これまたすれ違いですか?そうでないなら質問したいのですが
851デフォルトの名無しさん:2005/05/30(月) 21:09:52
>>850
それ、ネットワークプログラミングに関係あるの?
よく考えてから物言えよ。
852デフォルトの名無しさん:2005/05/30(月) 21:29:58
>>851
>>1 に "主にソケットに関しての質疑応答スレです"
となっていたので、(Unix Domain)Socket の質問をしようと思ったのですが

どうやら、立ち去った方がよさそうですね。
853デフォルトの名無しさん:2005/05/30(月) 21:32:13
この板はプログラム板だから、もしプログラミングに関係するなら
854デフォルトの名無しさん:2005/05/30(月) 21:35:45
> netstat コマンドの出力

犬板逝け
855デフォルトの名無しさん:2005/05/30(月) 22:17:01
>>837ってマジ?
sendの戻りなんかチェックしてないわ・・
856デフォルトの名無しさん:2005/05/30(月) 22:28:05
>>855
おいおい(;´Д`)
857デフォルトの名無しさん:2005/05/30(月) 22:36:36
いやー、SOCKET_ERRORかどうかはチェックしてるけど、
こういうのだし
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;
 }
}

こんなんで
上の他に何か必要なものありますかね
858デフォルトの名無しさん:2005/05/30(月) 22:39:30
  size -= r;
の間違い

つーかやべーな
既に稼動してるのとかあるしw
859デフォルトの名無しさん:2005/05/30(月) 22:46:34
通報しました
860デフォルトの名無しさん:2005/05/30(月) 22:55:50
やっべーおれもだよ sendの戻り値か・・・
あれ?sendって実行時に送信するわけじゃないよな
実装にもよるけど、たいていはキューにぶち込まれて
あとはOSが処理しないか?
TCPなら再送もあるし待ってらんないんじゃ?
あれ?でもそれはノンブロッキング時のみの話か?
ちょっと妹に聞いてくる
861デフォルトの名無しさん:2005/05/30(月) 23:01:15
>>860
> 実装にもよるけど、たいていはキューにぶち込まれて
これは仕様で保証してないわけでしょ?
862デフォルトの名無しさん:2005/05/30(月) 23:19:26
てゆうか、キューが中途半端に一杯だと、partial write に
なる。キューが完全に一杯ならブロックするけど。
あるいは、キュー自体より大きなサイズを送ろうとしても
同様に partial write になる。

UNP読んでれば常識。WindowsプログラマーでもUNPだけは
読んどけ。
863デフォルトの名無しさん:2005/05/30(月) 23:21:31
UNPって何?
うん(ぴー)こってこと?
864デフォルトの名無しさん:2005/05/30(月) 23:22:32
>>2 にある UNIX Network Programming のこと
865デフォルトの名無しさん:2005/05/31(火) 00:29:14
みなさん fwrite とかでも戻り値見ないんですか?
866デフォルトの名無しさん:2005/05/31(火) 00:40:44
楽しくなってきたぞ
867デフォルトの名無しさん:2005/05/31(火) 01:08:47
うはwwwww
fwriteのは第三引数で与える項目数だけ*出力する*んだよねー
趣が全然違う
868デフォルトの名無しさん:2005/05/31(火) 03:45:08
>>862
妹にもそういって馬鹿にされたよ・・・
869デフォルトの名無しさん:2005/05/31(火) 05:49:48
>>868
萌え(*´∀`)つ
870デフォルトの名無しさん:2005/05/31(火) 13:39:54
>>867
「出力することを試みる」けど、成功するとは限らない。

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).
871デフォルトの名無しさん:2005/05/31(火) 14:11:40
つーか“出力する”を強調している理由がわからん
872探してます。:2005/05/31(火) 17:09:44
ネットワークのパスを自動化(例えば)
EcoPassIEUのネットワーク版、ありましたらよろしくです。
873デフォルトの名無しさん:2005/05/31(火) 17:24:15
network pathの自動化だって?ripdでも動かしとけ。
874探してます。:2005/05/31(火) 17:30:44
>873
ripd今調べてみましたが
一般には敷居が高いようなZebraサーバーとか・・・
875デフォルトの名無しさん:2005/05/31(火) 17:43:01
話がかみ合ってないのに会話できてるのはなぜだw
876デフォルトの名無しさん:2005/05/31(火) 20:12:02
>>857
sendは成功すると必ず1バイト以上は送ることを保障する
よって>>857はエラー処理を除き完璧なソースと言える
877デフォルトの名無しさん:2005/05/31(火) 22:57:27
普通にプログラム飛ぶでしょ
878デフォルトの名無しさん:2005/06/01(水) 00:09:41
基本を知らないのにいきなりプログラムしてる奴が多いのに驚いた。
これから時間をかけてそのツケを払うんだろう、スマートじゃ無いなあ
879デフォルトの名無しさん:2005/06/01(水) 00:23:27
エラー処理が省略(または無視)されたサンプルソースや
ネットに転がってる他人のソースを見てモノマネで作るからいけない。

関数リファレンス見て自分で考えて創る香具師がめっきり減った。
880デフォルトの名無しさん:2005/06/01(水) 00:40:03
JAVAのSOCKETはSENDの戻り値なんてありませんよ?
ダサいですね。>UNIX
881デフォルトの名無しさん:2005/06/01(水) 00:44:03
>>880
つまらん。2点。
882デフォルトの名無しさん:2005/06/01(水) 13:35:52
sendに成功しても向こうに送れてるとは限らんしねぇ。
さらに上のレイヤで確認しないといけないかも。
883デフォルトの名無しさん:2005/06/01(水) 16:53:32
どちらにせよ確実な確認方法は無いよ。
結局はエラー処理のエラー処理になって、永久に確実な方法にはならない。
無駄にレイヤーが増えるだけですよ
884デフォルトの名無しさん:2005/06/01(水) 19:14:34
みなさん fwrite とかのあとに verify しないんですか?
885デフォルトの名無しさん:2005/06/01(水) 19:36:53
send() の返り値をチェックするのは送信できているかどうかを確認するため。
届いてるかどうかは別問題だろ。
886デフォルトの名無しさん:2005/06/01(水) 21:31:52
TCPだと届いてなかったら届くまで再送する(その間sendはブロックする)んじゃないの?
UDPだと送ったというだけで届いているかどうかは知ったこっちゃないが
887デフォルトの名無しさん:2005/06/01(水) 22:04:16
>>886
届くまで何回か再送を試みるが、sendはブロックしないよ。

再送を試みた結果、駄目だったら接続が閉じられる。
閉じられるまでに、何処まで正常に送信されていたかは、分からないな。
888デフォルトの名無しさん:2005/06/01(水) 22:57:54
>>887
> sendはブロックしないよ。
ブロックするだろ。
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-2.html#ss2.11
 送信側は、ソケットの送信バッファが一杯になった時にブロックします。
889デフォルトの名無しさん:2005/06/01(水) 23:02:40
つまりバッファが一杯になるまではブロックしないってことだよな?
890デフォルトの名無しさん:2005/06/01(水) 23:15:56
送信バッファのことを忘れてたorz
バッファがいっぱいになるまでは送信に成功したとしても
届いているとは限らないってことね。
891デフォルトの名無しさん:2005/06/02(木) 01:56:03

「チッ!UDP使ったけどパケット落ちまくりやがる。やっぱTCPだな」

と言ったことのある香具師のうちの何人かは>>855みたいなヤツなんだろうな。
892デフォルトの名無しさん:2005/06/02(木) 03:08:17
戻り値チェックしなくちゃいけないのはTCPでも一緒でしょ
893デフォルトの名無しさん:2005/06/02(木) 03:22:20
戻り値チェックしなくちゃいけないのはダムファイルでも一緒でしょ
894デフォルトの名無しさん:2005/06/02(木) 07:06:43
send()は「送信バッファにmemcpyする」だぞ。
判ってんのかなあ。
895デフォルトの名無しさん:2005/06/02(木) 11:45:22
>>894
ギャハッハハwwwwwwwwwwwww
896デフォルトの名無しさん:2005/06/03(金) 07:59:51
RAWsocketについて勉強したいんですけどおすすめのサイトとか本ってありますか?
897デフォルトの名無しさん:2005/06/03(金) 09:25:24
もちろんありますよ
898デフォルトの名無しさん:2005/06/03(金) 10:06:25
うむ、オレにもあるな
899デフォルトの名無しさん:2005/06/03(金) 13:02:41
>>891
返り値調べればパケットが落ちたどうか分かると思っているんでしょうか?
900デフォルトの名無しさん:2005/06/03(金) 14:41:00
>>897
詳しく
901デフォルトの名無しさん:2005/06/03(金) 23:14:15
>>896
俺はわかんないことがあったら妹に聞いてる
902デフォルトの名無しさん:2005/06/03(金) 23:49:16
いいなあ
903デフォルトの名無しさん:2005/06/04(土) 01:44:01
UDPは黙って捨てることがあるんだったな
904デフォルトの名無しさん:2005/06/04(土) 03:41:09
ルータのqueueが溢れたらUDPはそのままネットのもくずと消える
905デフォルトの名無しさん:2005/06/04(土) 08:48:27
もずくで一杯やりたくなってきた
906デフォルトの名無しさん:2005/06/04(土) 10:10:22
俺はUDPで一杯やりたい。
907デフォルトの名無しさん:2005/06/05(日) 00:44:45
>>906
変態!
908デフォルトの名無しさん:2005/06/05(日) 20:57:07
WinSockで、
bind()で、SO_REUSEADDR エラーになる。
bind以前に、同じアドレスでbindしたソケットは、closesocket してる。
ただしその前に、そのソケットでWSAAcceptやって、ソケットを1つ生成してる。
生成したScoketでは、bindしてない。
どこが悪いんでしょうか。
909デフォルトの名無しさん:2005/06/05(日) 20:59:34
間違えた。
SO_REUSEADDR エラーじゃなくて、WSAEADDRINUSE エラー
910デフォルトの名無しさん:2005/06/05(日) 21:05:36
質問する前に>>1を嫁
911デフォルトの名無しさん:2005/06/05(日) 21:17:27
WSAAcceptで生成されたソケットには、元のソケットのポート番号が割り当てられているということ?
912デフォルトの名無しさん:2005/06/05(日) 21:30:15
だから「質問する前にちゃんと読め」という日本語がわからないのか?
http://www.kt.rim.or.jp/~ksk/sock-faq/unix-socket-faq-ja-4.html#ss4.1
913デフォルトの名無しさん:2005/06/05(日) 21:44:02
>>912
2.7 TIME_WAIT 状態について考えてみました

TCPは、closesocketで閉じられたときにも、ソケットが有効に働いてることは、
これはTCPは、あなたのお友達であり、助けであるのです。
喪失されたと思われたパケットは、これは実際にはデータが失われていないで、
ルータを徘徊していたゾンビだったのかもしれません。思い出してください。それは、
きっと大切でしょう。ソケットを賢く使うのにおいて。


しかしだね。
WSAAcceptでソケットを生成しないで、bindしたソケットを閉じて、
すぐに、それと同じアドレスとポートで、新規ソケットでbindしたときは、エラーにならないよ。
914デフォルトの名無しさん:2005/06/05(日) 22:08:17
WSAAcceptで生成されたソケットを閉じて、
WSAAcceptしたソケットをまた使い続けることができる。
ということは、WSAAccept でソケットが生成されたときは、
同一プロトコル同一ポートのソケットが、2つになる?
915デフォルトの名無しさん:2005/06/05(日) 23:23:41
まあ、そうだ。但し、ローカル側のプロトコルとポートが同じなだけで、
同じものじゃないことに注意
916デフォルトの名無しさん:2005/06/05(日) 23:54:41
>>195
ソケットは、IPアドレスと、プロトコルと、ポートによって識別される。
だから同じじゃんよ
917デフォルトの名無しさん:2005/06/06(月) 00:19:38
>>916
そう。だから死ねる。
918デフォルトの名無しさん:2005/06/06(月) 06:38:58
物事は正確に言おうや。
ソケットは、Protocol, SrcIP, SrcPort, DstIP, DstPortによって識別される、と。
919デフォルトの名無しさん:2005/06/06(月) 12:49:27
>>918
省略語ばっかりで正確さに欠けるので、もう少し正確にお願いいたします。
920デフォルトの名無しさん:2005/06/06(月) 17:29:28
TCP接続は、
<発信元IPアドレス、発信元ポート番号、発信元受信元IPアドレス、発信元ポート番号>
の四つ組でユニークに識別されるけど、>>916から話がずれてきている。
921デフォルトの名無しさん:2005/06/06(月) 18:04:25
>>918、920
ヘーそなんだ。
そんで、ソケットに割り当てられている、
Protocol, SrcIP, SrcPort, DstIP, DstPort
は、どうやって取得するの?
922デフォルトの名無しさん:2005/06/06(月) 18:08:47
>>918
socketはsocket descriptorによって識別される、と:b
923デフォルトの名無しさん:2005/06/06(月) 18:10:10
少しは自分でしらべろよ
getsockname()
getpeername()
をつかえ
924デフォルトの名無しさん:2005/06/06(月) 18:11:37
getpeernameすれば、DstIP, DstPortがとれる。
getsocknameすれば、SrcIP, SrcPortがとれる。
Protocolは、両方でとれる。
925デフォルトの名無しさん:2005/06/06(月) 18:16:40
getpeernameなんてあったのか。
ソフトバンクの、WinSock2.0プログラミングには、載ってないよ。
どこに載ってるの?(日本語で)
926デフォルトの名無しさん:2005/06/06(月) 18:19:02
ごめん載ってた。
ただし、リファレンスに。
索引は載ってない。つまり、本文の中で扱ってないのか
927デフォルトの名無しさん:2005/06/06(月) 18:37:22
一気にパケットをいくつか送信して
受信側から受け取り確認されてないものだけ
タイムアウトを決めて送信するプログラムを作ってるのですが。

送信メッセージとエラー率を多くすると、Interrupted System Call
って言うエラーが出てきます。これを回避できる考えがある方、
ご意見お待ちしております。
928デフォルトの名無しさん:2005/06/06(月) 18:41:35
>Interrupted System Call
これは、誰が・どこで・どうやって出してるんだ?

あと、環境を書け。
929デフォルトの名無しさん:2005/06/06(月) 18:44:16
そうでした。すいません。

Red Hat Linux 9
gcc 3.2

自分のPCで送信者と受信者、サーバを扱い、シュミレーション
みたいなことをやっています。
エラーはサーバから出されました。
930デフォルトの名無しさん:2005/06/06(月) 19:18:24
なんかソケットのソケット番号から
OSにIPアドレスとかポートとかを聞き出す
関数ってなんだっけ?
あーOSはLinuxでおねがいします。

つーか、ネットワーク関連の関数の
逆引き索引みたいなやつってないの?
931デフォルトの名無しさん:2005/06/06(月) 19:33:00
わずか10レスも見ないとはひどいものだ。
まったく最近の釣りもレベルが低くなったことよ。
932デフォルトの名無しさん:2005/06/06(月) 21:02:40
>>927,929
たぶんalarm使ってゴソゴソやってんだと思われるが、
readかwriteの実行中にSIGALRMが来てるだけだろう。
sigaction使ってSA_RESTART指定しろ。
933デフォルトの名無しさん:2005/06/06(月) 21:52:10
>>932
ありがとうございます。
今からやってみます。
934デフォルトの名無しさん:2005/06/06(月) 23:41:50
>>931
ありがとう

あとは、逆引きの索引がほしいなあ
935デフォルトの名無しさん:2005/06/07(火) 00:57:19
スレ違い。
936デフォルトの名無しさん:2005/06/08(水) 15:44:26
getsockname/getpeernameは、getsockaddr/getpeeraddrだったら、
gethostbyname/gethostbyaddr, getaddrinfo/getnameinfoとの親和性が良かった。

>>934
以上をmanで読むこと。
937デフォルトの名無しさん:2005/06/08(水) 15:47:31
>>936
正引きしかないよ
938デフォルトの名無しさん:2005/06/09(木) 13:56:18
>>930の言っている「逆引き」つーのは、
こういう事したいんだけど、使うのはどの関数? ってことでしょ?

昔はman/man -kで探し当てていたけど、
Linux(で日本語)なら、googleで「キーワード JM site:linux.or.jp」でどうよ?
939デフォルトの名無しさん:2005/06/09(木) 14:39:27
>つーか、ネットワーク関連の関数の
>逆引き索引みたいなやつってないの?

これって機能から関数名を調べたいっていう意味だろうね
940デフォルトの名無しさん:2005/06/09(木) 20:39:36
逆引きが必要なほど沢山関数あるかね?
UNIX系の場合、たいした数じゃないので、
全部覚えた方がいいような気がするが。
WinSockだとあるのかな?
941デフォルトの名無しさん:2005/06/09(木) 21:04:07
つーか、man -k
942デフォルトの名無しさん:2005/06/09(木) 23:38:27
つーか locate と grep
943デフォルトの名無しさん:2005/06/10(金) 00:30:41
getsockname とかに辿り着くまでにすげー時間かかったんですけど
944デフォルトの名無しさん:2005/06/10(金) 00:33:45
だからソケット関係だけでも一度マニュアルを全部ざっと読んどけ。
945デフォルトの名無しさん:2005/06/10(金) 00:53:28
こういうところがいやなんだよな
ろくなドキュメントをそろえもせずに
口を開けば find grep man
あげくのはては ソースミロ
あほちゃうか
946デフォルトの名無しさん:2005/06/10(金) 00:54:37
体系化されてない関数群なんてゴミ以下だよ
その場しのぎの拡張の連続
947デフォルトの名無しさん:2005/06/10(金) 01:02:25
特に socket 周りの関数群はひどいね
支離滅裂
948デフォルトの名無しさん:2005/06/10(金) 01:16:44
そりゃそうだけど、socket(2) 見れよ、って感じ。FreeBSD 以外に
あるかどうかは知らんが。
949デフォルトの名無しさん:2005/06/10(金) 01:18:10
>>943
> getsockname とかに辿り着くまでにすげー時間かかったんですけど

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/socket.7.html
↑これ読んで終了って書こうと思ったら、間違ってるorz

> getsockbyname(2) はローカルのソケットアドレスを返し
< getsockname(2) はローカルのソケットアドレスを返し
950デフォルトの名無しさん:2005/06/10(金) 01:19:59
>>948
FreeBSDならハンドブックじゃないの?
http://www.freebsd.org/doc/en_US.ISO8859-1/books/developers-handbook/sockets-essential-functions.html

読みたくない人は検索ね。
951デフォルトの名無しさん:2005/06/10(金) 01:43:39
とはいえ、逆引きの資料があったって別にいいわな。読みたい人はいるわけだし。

誰か書いて売ればいいじゃん。
「TCP/IP 500の技」ってのがあるけど、getsockname は買いてないみたいね。
952デフォルトの名無しさん: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読めばいいんだけどね。和訳もあるわけだし。
953デフォルトの名無しさん:2005/06/10(金) 02:01:59
> バックグラウンドにある概念を素直に括り出した

言い換えれば、要するに「低水準」「そのまんま」「剥き出し」
なインタフェースなんだよな。
昔から概念が存在するファイルのようには、高度に抽象化・単純化された
インタフェースにはなってない。

ソケットプログラミングは、open/read/write/closeでは済まずに
皆にioctlを強要するようなイメージ。
もっと標準に近いところで、Java程度に手軽なC/C++ライブラリが
あるといいのだが。
954デフォルトの名無しさん:2005/06/10(金) 02:41:36
あんまし単純化されちゃうと面白みがなくなる
955デフォルトの名無しさん:2005/06/10(金) 02:43:38
んなことない。
普通socket/getaddrinfo/connect/read/write/closeだけで
済みますよ。openがsocket/getaddrinfo/connectに変わった
だけで、ファイルアクセスとレベルは変わらん。
956デフォルトの名無しさん:2005/06/10(金) 03:10:24
>>955
おめでたいな・・・
趣味レベルにとどめとけよ
957デフォルトの名無しさん:2005/06/10(金) 03:21:19
やりたいことにもよるが、>>955の範囲で書けるプログラムも
多いでしょ。たとえば古き良き finger なんて、実際その程度
のことしかしてない。
それ以外のAPIが必要なのは、socketシステムコールがファイル
アクセスシステムコールよりも低レベルだからじゃなくて、
背後にある概念がファイルアクセスよりも複雑だからだな。
レベルの高い低いは似たようなもん。
958デフォルトの名無しさん:2005/06/10(金) 09:23:28
>>945
>ろくなドキュメントをそろえもせずに
>口を開けば find grep man

じゃお前の部署で書いて晒せ
うちには予算が無い いや~ん(//∇//)
959デフォルトの名無しさん:2005/06/10(金) 13:32:34
>>953
凝ったことしなくてイイんなら、ディスクリプタを fdopen に突っ込めば
イイんじゃないの?俺は使ったことないから知らんけど。
960デフォルトの名無しさん:2005/06/10(金) 14:16:44
>>959
実際、4.3BSD以降の finger は、まさに fdopen() にソケットを
渡してる。

ただし stdio の実装がタコタコなOSだと駄目かも。
例えば SVR4 の 4.0.3 以降、4.1 より前では、fread() で
partial read を正しく処理してないため、ベンダが独自に
直してない限り fread() を使うと問題が出る筈。
961デフォルトの名無しさん:2005/06/11(土) 01:22:44
むしろなんでもファイルにしようという概念が好かん
fd扱ってても結局ファイル扱ってるのかパイプ扱ってるのか
ソケット扱ってるのか意識しなけりゃならないし
962デフォルトの名無しさん:2005/06/11(土) 01:25:41
生成するときはそれぞれゴチャゴチャと設定が必要だけど
とにもかくにも作ってしまえばあとはまあそれなりに
ディスクリプタを等価に扱える ってのは便利だよな

問題は生成時の処理のデタラメ加減なわけだが
963デフォルトの名無しさん:2005/06/11(土) 01:29:47
>>961
「ファイル」って…「入出力ストリーム」です。
964デフォルトの名無しさん:2005/06/11(土) 01:46:26
デバイスも入出力ストリーム・・・

と言えなくもないか
965デフォルトの名無しさん:2005/06/11(土) 01:55:09
あんなに簡潔なAPIを、ゴチャゴチャとかデタラメとか
表現する感覚が理解できん。

ストリームをディスクリプタで抽象化するという概念を
ちゃんと理解していたら、あれ以外の選択肢は、ほぼ
あり得ないのは明らかなのに、そういうことも分かって
ないのね。かわいそう。
966デフォルトの名無しさん:2005/06/11(土) 02:01:03
struct sockaddrをベースクラスのように扱って、サイズを見て判断
みたいなのはCだからしょうがないところはあるが、
キャストだらけの汚いコードを書かされる元

ユーザコード側の至る所でhtons, htonlなどを使う必要があるが、あれも
もっと減らせるだろ
プロトコルスタック側で変換かけりゃいいんだから

967デフォルトの名無しさん:2005/06/11(土) 02:01:49
インターフェースは簡潔なんだけどね
968デフォルトの名無しさん:2005/06/11(土) 02:08:36
getaddrinfo(3) と sockaddr_storage を使ってれば、いまどき
キャストなんて要らないよ。
sockaddr は opaque な型として扱うので、sockaddr_in みたいな
構造を触る必要もない。当然 htons や htonl も全く使わない。
感覚古すぎるよ...
969デフォルトの名無しさん:2005/06/11(土) 02:11:56
>>968
そりゃすまんかった
970デフォルトの名無しさん:2005/06/11(土) 02:43:48
いきあたりばったりの拡張であることは事実
971デフォルトの名無しさん:2005/06/11(土) 02:47:33
windowsのapiよりは…
972デフォルトの名無しさん:2005/06/11(土) 02:51:18
>>970
socket 関係のシステムコールは 4.2BSD の時に今のものと
ほぼ全く同じものが実装されて、その後、インターフェース
は特に変わってないんだけど。
自分が無知なのを自覚してないのか、それとも分かってて
デマを流しているのか、どちら?
973デフォルトの名無しさん:2005/06/11(土) 03:05:10
まあ当時はIPv6とかは無かったわなあ
974デフォルトの名無しさん:2005/06/11(土) 03:07:27
で、IPv6 でも、4.2BSD で設計されたシステムコールが
そのまま全く同じように使えると。こういうのは、普通
いきあたりばったりじゃなくて、先見の明があるって言
うよね。
975デフォルトの名無しさん:2005/06/11(土) 03:13:09
getaddrinfo()とかは新しいでしょ
あ、あれはシステムコールじゃないか
976デフォルトの名無しさん:2005/06/11(土) 03:15:38
まあでも、アドレスファミリー・プロトコル依存性だとか
>>966の言う汚さを隠蔽するために新しいインタフェースが導入されてるわけで
>>968の言うような世界はもともとは無かった訳だから
>>970の言うことも必ずしも間違いとは言えまいよ
977デフォルトの名無しさん:2005/06/11(土) 03:19:40
そう? いきあたりばったりってのは完全に間違いだと思うけど。
右に左にフラフラしてたわけじゃなくて、まっすぐ自然な拡張
だと思うよ。システムコール自体は、最初っからプロトコル独立
になってたわけだしね。
978デフォルトの名無しさん:2005/06/11(土) 03:24:26
プロトコル独立だけど透明ではなかったわけだ
だから後で隠蔽するラッパーを作る必要があった
979デフォルトの名無しさん:2005/06/11(土) 03:28:50
>>978
ひょっとして全然分かってないんじゃない?
IPv6を利用する場合のAPIは、システムコールに
ついては以前と全く同じで、ラッパーでも何でも
ないよ。
ライブラリ関数として実装されていた以前の
gethostbyname(3)/gethostbyaddr(3) が、別の
ライブラリ関数である getaddrinfo(3)/getnameinfo(3)
に置き換わるだけ。これも、置き換えであってラッパー
じゃない。
980デフォルトの名無しさん:2005/06/11(土) 03:33:54
ライブラリ関数=システムコールのラッパーという意味で書いたんだけど
まあどうでもいいや

置き換えは置き換え。ようするにインタフェースが代わったのは事実だよね
昔のままでは対応できなかったと。
981デフォルトの名無しさん:2005/06/11(土) 03:36:17
gethostbyname
getipnodebyname
gethostbyaddr
とコロコロかわってますな
982デフォルトの名無しさん:2005/06/11(土) 03:36:55
gethostbyname(3) や getaddrinfo(3) を
システムコールのラッパーと考える奴は
根本的にモノを分かってないと思われ。
983デフォルトの名無しさん:2005/06/11(土) 03:38:54
>>981
gethostbyname()とgethostbyaddr()を並べて「コロコロかわってる」って
言うわけね。(w
とりあえず、君はプログラミングはしない方がいいよ。
984デフォルトの名無しさん:2005/06/11(土) 03:38:56
いいよ俺はアフォでもモノがかわってなくても。
でも、インタフェース変わってるのは事実でしょ。

で、なぜか昔からかわってないんだと主張する香具師もいれば
>>968みたいに、新しいインタフェースなら綺麗なんだと主張する香具師もいる
985デフォルトの名無しさん:2005/06/11(土) 03:41:04
>>982
getaddrinfoは本質的にはgethostbyname, gethostbyname2のラッパーじゃないのか
アドレスファミリの差異その他を隠蔽するための
986デフォルトの名無しさん:2005/06/11(土) 03:42:06
inet_addr()のように使い物にならないとされて消えたのもあるな
987デフォルトの名無しさん:2005/06/11(土) 03:43:59
システムコールは昔から変わってないし、
ネームサービスのためのライブラリ関数は、昔の
プロトコル依存した関数から、プロトコル独立の
きれいな関数に変わった。
全然矛盾してないと思うけど?

いきあたりばったりっていうのは、拡張に拡張を重ねて、
迷路みたいになったインターフェースことを言うんだよ。
昔よりずっと見通しが良くなったのを指して、いきあた
りばったりと表現するってのは、プログラミングだけ
じゃなくて日本語のセンスにも問題があるのでは?
988デフォルトの名無しさん:2005/06/11(土) 03:47:02
なんだ単に「いきあたりばったり」って言葉にこだわってるだけか
もしかして?
それこそどうでもいい話だな
989デフォルトの名無しさん:2005/06/11(土) 03:49:39
size_tがsocklen_tに変わったりとか
まあ色々あるわな
ネームサービス周りだけじゃないだろ
990デフォルトの名無しさん:2005/06/11(土) 03:50:07
>>981
gethostbyaddrじゃなくて
getaddrinfo
だった
まぁどうでもいいな

しかしなんでそんなに必死なのか
991デフォルトの名無しさん:2005/06/11(土) 03:53:02
>>989
size_t が socklen_t になったんじゃなくて、
int を使ってる OS と size_t を使ってる OS があった
ので、共通のソースにできるように socklen_t が定義
されただだよ。
つまり実際には型は変わってない。名前が統一されただけ。
992デフォルトの名無しさん:2005/06/11(土) 03:55:10
行き倒れマッタリ
993デフォルトの名無しさん:2005/06/11(土) 04:10:30
ひとり基地害がいるね
994デフォルトの名無しさん:2005/06/11(土) 05:27:18
どこどこ?
995デフォルトの名無しさん:2005/06/11(土) 05:55:31
>>995
>どこどこ?
お前の事だ
996デフォルトの名無しさん:2005/06/11(土) 09:49:59
>>966>>970は馬鹿だから無視してください。スレが汚れます。
997デフォルトの名無しさん:2005/06/11(土) 09:51:58
>>985も馬鹿。仕様を理解してない。
998デフォルトの名無しさん:2005/06/11(土) 10:04:23
商用UNIXではシステムコール並の扱いだけどね。
999デフォルトの名無しさん:2005/06/11(土) 10:05:10
それが何か?
1000デフォルトの名無しさん:2005/06/11(土) 10:29:28
close(13);
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。