WinSock1,2

プロジェクト→[貴方プロジェクト名]のプロパティ→リンカー→追加の依存ファイルに

ws2_32.lib;

を追加する必要がある。
12


VisualStudioの構成はDebugとReleaseで完全に分かれているので、もう一度依存関係を指定する必要がある。
このエントリーをはてなブックマークに追加

イベントを2つ作成する。つまり……

Event = WSACreateEvent(); // FD_READ,FD_WRITE等用
_Event = CreateEvent(NULL, FALSE, FALSE, NULL); // FD_ACCEPT用

FD_ACCEPTを判定するイベントだけ、別で作成する必要がある。続きを読む
このエントリーをはてなブックマークに追加

WSAWaitForMultipleEvents(1, &Event, TRUE, 0, FALSE); // 第3引数はTRUE?


WSAWaitForMultipleEventsの第3引数をTRUEにすることで、通知0を回避できるかもしれない。
この第3引数はWSAWaitForMultipleEventsにて待ち受けるイベントの全ての通知が完了したかどうかを判断する。

これをTRUEにすることで通知0を受け取らなくなったので、困っている方は是非試してみて欲しい。

■続き
http://jamfolder.work/archives/24895834.html
このエントリーをはてなブックマークに追加

WSAWaitForMultipleEvents等でうまく通知をキャッチできない場合、(他にWaitForSingleObject等)
イベント0が通知されているかもしれない

下記のコードはうまくいかない


下記のコードは微妙にうまくいく(FD_READの文には入らない)
続きを読む
このエントリーをはてなブックマークに追加

※ここに書かれている内容は、私の経験則に基づいている内容であり、確証があるわけではない。

connect後にすぐsendを行うと、データが送信されないことがある。
そういうときは、connectの後に、0.3秒程ウェイトを作り、sendするとうまくいく。


経験上、sendが成功したりしなかったりするプログラムに対して有効である。

TCPでは、相手がデータを受け取れなかったとき、そのパケットを再送する。
このとき、他に送信したいデータがあれば、それを再送予定のパケットの最後尾に付加して送信する。
そのため、パケットに複数の境界があるデータを処理できないrecv関数を使用している場合、受信側でパケットを取りこぼしてしまうのである。
このエントリーをはてなブックマークに追加

↑このページのトップヘ