1 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 03:43:08 ] 主にソケットに関しての質疑応答スレッドです。 Programming UNIX Socket FAQ (日本語訳) www.kt.rim.or.jp/~ksk/sock-faq/indexj.html Winsock Programmer's FAQ (日本語訳) www.kt.rim.or.jp/~ksk/wskfaq-ja/ 関連リンクは>>2-10 辺り 足りなかったら適当に付け足してね 前スレ ネットワークプログラミング相談室 Port24 pc12.2ch.net/test/read.cgi/tech/1246895188/ 関連スレ ネットワークプログラミング雑談 pc12.2ch.net/test/read.cgi/tech/1235800707/ Java ネットワークプログラミング 【教えて!】 pc12.2ch.net/test/read.cgi/tech/1086238859/
159 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:25:49 ] レス有難うございます。 >>158 www.orca.med.or.jp/receipt/tec/dev/soft/claim.rhtml の(2)によると、送信した側がsocket closeと書いてあるようですので こちら側(送信側)がCloseしなければいけないのかなと考えています。
160 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:38:25 ] closeする前にサーバのACK/NAK応答は受信したのかと
161 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:41:31 ] 言っとくがTCPじゃなくてアプリレイヤーの話だぞ? >>159 のシーケンスをちゃんと嫁
162 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:45:18 ] 見落としてるだけだろ アホとしか
163 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:01:16 ] >>159 これだとCloseイベントでcloseしたほうがいいかもしれない。 >>155 のように
164 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:32:37 ] closeしなくてもほっときゃ切れるだろ
165 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 01:37:03 ] socketは全二重 送る側だけまずshutdown 読む側でEOFまで全て読み終わるのを確認してからclose これはちゃんとやって
166 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 09:17:58 ] 皆様何度も返信してくださって 厳しいながらもありがたい限りです >>160 そちらの受信は確認しております。 >>161 アプリレイヤーとTCPの違いがまだよく分かっていないのですが、 そこの部分は調べてみます >>163 ちょっとその手法でやってみます >>165 shutdownはwinsockメソッドにはなく、 www.int21.co.jp/pcdn/vb/noriolib/vbmag/9802/winsock/ で見ました。全文読んでいないのでなんともいえませんが、 まだ使い方が不明なので調査してみます。
167 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:40:54 ] >>166 > shutdownはwinsockメソッドにはなく、 何言ってるかわからない。 書く側だけまずshutdownしろってのは、 winsockのFAQの初心者向け項目に書いてあること。
168 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:47:48 ] 良くこれで仕事が出来るな・・・
169 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 00:04:43 ] とりあえずWiresharkで 双方の FIN → FIN,ACK → ACK のどこまで出てるか見てみたら?
170 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 05:43:11 ] サーバの開発元に質問するほうもアレだが、ありえないと回答するのもひどいな。 お互い良くそれでプログラマって言えるよな。
171 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 18:13:12 ] IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP IdException このへんのコンポーネントってIndyですか?
172 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 18:18:28 ] Indyですね
173 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 18:27:53 ] >>172 ありがとう IdってIndyって意味だったのか コンポーネントないからビルドできねぇ
174 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:35:50 ] >>153 > CLOSE_WAITになったまま消えてくれません。 サーバ側のCLOSE_WAITは全く関係ない。お前の作ったクライアントがダメなだけ。 > 何か、ありがちなミスなどありましたらご指摘よろしくお願いします。 自分のバグを他人の所為だと思いたがる態度が、初心者にありがちな重大なミス。 bindしてるだろ。
175 名前:114 mailto:sage [2009/11/12(木) 01:33:52 ] >>120 やっぱ無理だよな、ありがとう >>118 相手がわかってればいいんだけどねぇ
176 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 07:44:31 ] >>128 それじゃ3-wayハンドシェイクが成立しないだろ。可能だと主張するなら動作するサンプルコードを。
177 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 08:50:27 ] >>176 RFC に双方 connect() 時のシーケンス載ってるが?
178 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 09:01:03 ] >>176 RFC793 の figure 8 だけど、rfc1122 でその図の間違 いが訂正されてる。 4.2.2.10 Simultaneous Open Attempts: RFC-793 Section 3.4, page 32 There is an error in Figure 8: the packet on line 7 should be identical to the packet on line 5. A TCP MUST support simultaneous open attempts. DISCUSSION: It sometimes surprises implementors that if two applications attempt to simultaneously connect to each other, only one connection is generated instead of two. This was an intentional design decision; don't try to "fix" it.
179 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 09:25:14 ] > This was an intentional design decision; don't try to "fix" it. うわっ、強引。決めたんだからなおすな。
180 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 09:37:37 ] >>179 違う違う。「実装者は双方同時 open の結果として一つ しかコネクションが出来ないことに驚くかもしれないが、 これはそうなるように『設計』されているので直そうと するな」ということ。
181 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 10:28:32 ] コネクションが2つでなく1つなのは「そのように決めたんだからなおすな」って事でしょ。 なんで、そのように決めたんだろう。 という事は置いておいて、これは同時にconnectが発生した(例外的な)場合に関しての 規定であって、>>118 が言ってるような狙ってできるってもんじゃないよね。
182 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 10:29:35 ] >>174 >自分のバグを他人の所為だと思いたがる態度が、初心者にありがちな重大なミス 逆に自分のせいだと思って散々調べたら自分のせいじゃ無かったってのもよくある まずは切り分けが大事と思い知らされた
183 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 10:44:42 ] >>181 > 狙ってできるってもんじゃない 普通は RST が返るからってこと?
184 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 11:05:05 ] >>181 >なんで、そのように決めたんだろう。 同じIPアドレス、ポート番号のペアを持つコネクション は同時に複数存在できませんから。
185 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 11:18:53 ] 一方のコネクションが確立した後では、1本のコネクションにはならないでしょ。
186 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 11:22:01 ] >>184 なるほど、接続するという選択肢を取るならそのように決めるしかないわけか。 接続しないという選択肢もあったわけだけど、そっちは採用しなかったと。
187 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 22:30:35 ] 双方がwell knonw portになってから接続を開始しているわけだから、 四つ組みが決定している。一つの接続になるのが、設計上当然の帰結。 >>183 いや再送されたのと区別がつかない。 (IPタイムスタンプオプションとかない限り) それに普通のOSではREUSEADDRしたら、 前のは無効になる。
188 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:31:37 ] よくわからないレベルで仕事って確実に地雷だなw
189 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 11:26:24 ] 結局サンプルコードはまだ?まさか>>128 じゃないよね
190 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:06:33 ] RFCだけ読んで「キリッ」って奴がいかに多いか分かるな 実際のコーディングはまったくできないと。
191 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:24:58 ] 自分が仕事出来ないのを棚に上げて人のせいにする奴もいるしな
192 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 14:55:17 ] rfcも実際のコード実装例を描いてくれればいいのだがな。 そういうサイト作ると需要有るのか?
193 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 15:25:53 ] >>189 > まさか>>128 じゃないよね >>128 で何か不足してる? TCP/IP の同時 open は、よくある TCP/IP の状態遷移 図で通常サーバ側とクライアント側で違う経路を通ると ころを両方ともクライアント側の遷移を通るんだから >>128 であってる。 スティーブンス本のどれかで実際のプログラムと実行例 が載ってたよ。但し、双方の SYN が交差する位には充 分に遅い経路を使う必要があったと思う。
194 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 16:24:19 ] >>193 listenしなくて良いのか?
195 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 16:35:49 ] >>194 > listenしなくて良いのか? listen したら駄目なんだけど?
196 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 16:48:04 ] ほい、スティーブンス本での同時 open の話と実行例。 books.google.com/books?id=-btNds68w84C&pg=PA251 上で使われてる sock プログラムのソースコード。 www.icir.org/christian/sock.html listen() を呼び出している servopen() は -s オプショ ンが無いと実行されないけど上の例では -s ついてない でしょ。
197 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:43:24 ] cygwinでsockコマンドコンパイルしてlocalhostでやってみたけど、 確かに同時に実行するとconnect成功するね ・・・同時に実行しなければ繋がらないってのは、ちょっと面白いな
198 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:23:34 ] 遂にgoogle booksを参照する時代になったか。
199 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:31:32 ] 結局、元質問(>>114 )を実現する事はsocketプログラミングの範囲ではできないという結論だね。
200 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 18:08:03 ] できるだろ。釣りかよw
201 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 18:23:33 ] listenの実装を自分で書き換えればいいだろ
202 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 00:05:59 ] >>200 動作するサンプルを。
203 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 01:21:09 ] >>201 socket.h内のSOMAXCONNを1にしたらひどぅい目に遭いましたw 実装の書き換えまで手を出すのは正直無理ぽですね。
204 名前:デフォルトの名無しさん [2009/11/16(月) 04:45:47 ] ttp://x68000.q-e-d.net/~68user/net/c-http-1.html このページを参考に1回connectに成功したらaspxファイルのヘッダとボディのデータを 分けて要求するプログラムを作ったのですがボディのデータを要求するとコネクションが切断されているのかread関数が0を返します。 close関数を使っていなくても1回データを要求したら切断されてしまうものなのでしょうか。ソースは次のレスに記載します。
205 名前:デフォルトの名無しさん [2009/11/16(月) 04:48:30 ] char path[100],buf[1000],host[]="www.nurupo.jp"; struct hostent *servhost;struct sockaddr_in server;struct servent *service;int s,read_size; servhost = gethostbyname(host);bzero(&server,sizeof(server));server.sin_family = AF_INET; bcopy(servhost->h_addr,&server.sin_addr,servhost->h_length);server.sin_port = htons(80); s = socket(AF_INET,SOCK_STREAM,0);connect(s,(struct sockaddr *)&server,sizeof(server)) sprintf(path,"HEAD /gga.aspx HTTP/1.0\r\n\r\n"); write(s,path,sizeof(path)); while(1){ read_size = re ad(s,buf,sizeof(buf)); if(read_size > 0){write(1,buf,sizeof(buf));} else{ break;}} sprintf(path,"POST /gga.aspx HTTP/1.0\r\nContent-Length: 10\r\n\r\nnurupo=gga\r\n\r\n"); write(s,path,sizeof(path)); while(1){ read_size = read(s,buf,sizeof(buf)); if(read_size > 0){write(1,buf,sizeof(buf));} else{break;}} close(s);
206 名前:デフォルトの名無しさん [2009/11/16(月) 05:00:41 ] >>204 >>205 です。 if(read_size > 0){write(1,buf,size_of(buf))} の行のsize_of(buf)はread_sizeでした。 すいません…
207 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 05:42:52 ] HTTP/1.0 RFC1945 1.1は2616
208 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 09:05:10 ] >>204-205 HTTP/1.0はそのように決められている。 HTTP/1.1ではPersistent Connectionsというのがあるが、使い方はかなり難しい。
209 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 09:17:41 ] 別に難しくは無いさ。 リクエストとレスポンスを交互に繰り返すだけであれば。 終端だって、どうやって判断すればよいかちゃんとRFCに書いてある。 chunkの読み出しも、そのまま実装するだけ。
210 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:04:36 ] 嘘つきサーバが多いから難しい。
211 名前:デフォルトの名無しさん [2009/11/17(火) 02:24:14 ] テスト
212 名前:デフォルトの名無しさん [2009/11/17(火) 15:47:40 ] >>204 です。 お返事ありがとうございます。 RFC2616やグーグルしたところ、HTTP/1.1はHost: URLを記述しなければいけないとのことだったので 記述し、2回目のデータ要求ではConnection: Closeを記述したところ2回、データを要求することが出来ました。 2回目はBad Requestになってしまいますが。。 RFCを見て、少しやる気をなくしてしまいましたが 出来たらネットワークの勉強に励み、この問題をいつかは解決したいと思います。 ありがとうございました。
213 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 00:14:01 ] UDPのブロードキャストについて質問です pythonとCで書いてます。(例はpythonで書きます) ブロードキャストでデータを送りたいのですが、 setsockoptでSO_BROADCASTを有効にし、 # pythonの例 sock.sendto( data, ( "255.255.255.255", 1234 ) ) としても、受信側で受信できません。 # 受信側のIPアドレスは192.168.11.4 sock.sendto( data, ( "192.168.11.4", 1234 ) ) として、ユニキャストだと受信できることを確認しています。 環境はlinuxです。 ブロードキャストアドレスとして255.255.255.255を使うのは間違ってますか?
214 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 03:25:47 ] それは自分の所属するサブネットの中なの?外なの?
215 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 06:15:52 ] >ブロードキャストアドレスとして255.255.255.255を使うのは間違ってますか? はい
216 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 07:06:20 ] rootにならないとできないとかそういうのもあるよね。
217 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 08:36:47 ] ブロードキャストアドレスとして192.168.11.255と設定してあるだろ。 それ使えよ。
218 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 13:28:28 ] 基本的にネットの負荷が上がるのでブロードキャスト非推奨。 つ ブロードキャストストーム 輻輳を検知するとポート綴じちゃうスイッチも有るよ。
219 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 18:32:47 ] >>214 自サブネット内です。 >>215 はい ありがとうございます >>216 rootになっても変わりませんでした。 >>217 確かに/24で切ってるので、192.168.11.255も試したのですが変わりませんでした。 ハード的におかしいのかと思い、 192.168.11.4を持つマシン上で、サーバとクライアントを動かしたのですが、 結局受信しませんでした。 wiresharkでみるとパケットは観測されてたのですが・・・
220 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 18:44:37 ] promiscus
221 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 19:02:55 ] × promiscus ○ promiscuous
222 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 23:24:41 ] >>219 受信側はどうバインドしてるの? 例えば'192.168.11.4’にバインドしてたらそのアドレスへのユニキャストしか受信出来ない。 ブロードキャストも受け取りたいならアドレスは'' (空文字列)でバインドしなければだめ。
223 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 19:20:27 ] 空文字列? 192.168.11.255にバインドするべきじゃないの?
224 名前:デフォルトの名無しさん [2009/11/21(土) 19:21:12 ] どうみても 0.0.0.0 にバインドです本当にありがとうございました
225 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 19:39:22 ] まったく知識がないんだがどこから手をつければいいのか教えろカスども
226 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 19:50:51 ] .255なんて使うなよw
227 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 19:56:40 ] まずお前が何をしたいのか教えろよカスが
228 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 19:57:53 ] SEXしたい;;
229 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:06:44 ] おまえら! N88ベーシックの時代を思い出せ! 使ってるだけじゃだめなんだよ! 利用者全員がプログラマーにならなきゃ世の中は良くならない! そうだろうみんな!!
230 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:07:39 ] 食いっぱぐれます
231 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 22:21:39 ] せんせー IPアドレスからgethostbyaddrでホスト名とってくるプログラムをVC++(まあなんでも出来るが)で組んだのだけれど、 もし取ってこれなかった場合 >初回の例外が発生しました: 0x000006BA: RPC サーバーを利用できません。 みたいなのが出力パネルに無視して平気? 一応host名がNULLだった時の退避路はあるし、エラーでプログラムが止まるわけじゃないんだけど なんかわざわざ一回づつ排出するもんだから気になって
232 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:24:51 ] try catch
233 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 02:37:25 ] これかな support.microsoft.com/default.aspx?scid=kb;en-us;105675
234 名前:デフォルトの名無しさん [2009/11/24(火) 19:49:11 ] ソケット生成してbindした時点で、データが送られてくると 受信はされるのでしょうか? そこから、recvformで取り出すといった感じなのでしょうか? データを一定間隔で送信し、送信した結果複数の個所からデータが返ってくる とした場合、最初に返ってきたデータだけをデータとして取り込みたいのですが こういった場合、どうするのが最適でしょうか?
235 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:32:30 ] bindってよく考えたら、0.0.0.0でbindしておけば 自分のIPが192.168.11.4でも recvfromで192.168.11.100 宛のデータも受信できるのでしょうか? (ポート等は同じで、ARPで関連づけておくとして)
236 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 20:44:28 ] promiscuous
237 名前:デフォルトの名無しさん [2009/11/24(火) 21:35:41 ] promiscuous は関係ない
238 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 21:42:51 ] それより質問の仕方が悪い
239 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 22:43:16 ] 通常のモードだと自分のMAC宛のパケットしか受信できない
240 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 22:56:11 ] >>239 ARPテーブル操作して、自分のmac向けに別のIPを関連づけたら届きますよね そこで0.0.0.0をbindしておけば自分の今のIPとは違うデータまで受信できるということでしょうか?
241 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 23:30:36 ] >>240 MAC判別はネットワークチップの機能だよ
242 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 23:37:24 ] >>241 すみません、よくわかってないのですが MAC判別がどう関係あるのでしょうか? 宛先mac自体は、本来の宛先macをarpテーブルで指定してやりますよね
243 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 23:42:42 ] 送信する相手のARPテーブルを操作するって事か それが受信できるかどうかはIP層の実装仕様次第じゃないのか? 普通は出来ないと思うが・・・
244 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 23:51:53 ] 変なパケットは捨てるのが基本
245 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 00:00:49 ] 実装仕様とはNICに依存するのでしょうか? でもmacアドレスはあってる、IP層のIPも送信元がARPテーブル操作してあってる から届くはずだとはおもうんですが
246 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 00:52:43 ] > ARPテーブル操作して、 どこのマシンのARPテーブルいじる気だよ。毒入りarp投げるのか? オレの管理下で発見したら接続禁止だぞ。上司が土下座しなけりゃつなげさせない。 > そこで0.0.0.0をbindしておけば自分の今のIPとは違うデータまで受信できるということでしょうか? IPってゆうな。クズ。 例え送信元のARPテーブル操作してパケットが届いたとしても出来ない。 0.0.0.0は自マシンのアドレスに対するワイルドカードだからだ。 もう一回言っておく。IPってゆうな。クズ。
247 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 01:18:53 ] 受信したいマシンが 192.168.11.100 というIPを持っていないから無理 RawIPでも使え
248 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 01:28:28 ] IPってゆうな。クズ。
249 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 01:37:02 ] 単にアドレスって言うのもハンパだろ?
250 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 01:45:49 ] IPアドレスを省略するときは単に「アドレス」って言う IPは知的財産の省略形として稀に使うぐらい
251 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:01:57 ] ネット盗聴ソフトか不正アクセスでもするソフトでも作ってるのかw
252 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 03:27:17 ] >>235 環境による >>240 環境による
253 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 06:53:48 ] promiscuous
254 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:32:45 ] >>246 >>247 >>252 さんがいうには、環境によってはできるとのことですが
255 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 07:33:57 ] 俺の自作スタックなら何でも出来る
256 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 08:02:59 ] >>252 かなりめずらしい環境でないか? 組み込み系のマイナーな スタックとか?
257 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 17:54:55 ] WinSockのWSAAsyncSelectについて質問です。 今まで使い方を間違えていたらしく、あちこちのサンプルでは (1) リスニングソケットにはFD_ACCEPTを設定し WSAAsyncSelect(socketListen, hWnd, (WM_APP + 1), FD_ACCEPT)) (2) case FD_ACCEPT内で SOCKET socket = accept(m_sckListen, &addr, &nLength); WSAAsyncSelect(socket, hWnd, (WM_APP + 1), FD_READ | FD_CLOSE) と、個別にFD_READやらFD_CLOSEを設定するのが正解のようです。 今まで私は(1)で FD_ACCEPT | FD_READ | FD_CLOSE と設定し、(2)ではWSAAsyncSelect自体を呼び出していませんでした。 ですが、この状態でもsocket側に通信データが送られてきた際に、きちんとwParam == socketな状態でWD_READが呼び出されていました。 これは、正規の仕様に乗っ取った挙動なのでしょうか? 例えば「リスニングソケットにFD_READなどを設定しておくと、そのリスニングソケットでacceptされたソケット全部にFD_READが自動的にセットされる」とかでしょうか?
258 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 18:11:24 ] asyncも分かってないしselectも分かってないな
259 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 20:36:58 ] ソケット生成してbindした時点で、データが送られてくると 受信はされるのでしょうか? そこから、recvformで取り出すといった感じなのでしょうか? データを一定間隔で送信し、送信した結果複数の個所からデータが返ってくる とした場合、最初に返ってきたデータだけをデータとして取り込みたいのですが こういった場合、どうするのが最適でしょうか?