Короче вот столкнулся с таким глюком: сервер вызывает accept клиент вызывает connect сервер возвращает accept всё ок у клиента connect тоже возвращает всё ок далее идёт recv данных с этого клиента. и вот... весь урюк в том, что примерно в 1 случае из 10 recv возвращает -1 !!! т.е. якобы клиент отрубился. хотя этого не происходило. А у клиента в свою очередь recv ничего не возвращает! а ждёт!. т.е. клиент уверен, что он подключён к серверу, а серверный recv почему-то решил, что клиент разорвал соединение. вот и я не могу понять в чём дело. может 50 раз пройти подключение нормально, и на 51 почему-то сервер рубит клиента сам. Да при этом WSAGetlasterror после того как серверный recv вернул -1 говорит, что ошибок-то и нет никаких!
Чёт ты все запутал... Как я понял у тебя и клиент и сервер вызывают recv? Зачем? Может лучше на сервере recv, а на клиенте send? =))) На сервере recv возвращает -1 не потому, что обрыв связи, а потому, что данные не смог получить - клиент-то тоже их получет в это время (вот тебе откуда 1 из 10)
что значит "зачем recv"? 8) recv у обоих запущен в отдельном потоке, потому что они общаються между собой постоянно. send естественно у обоих тоже есть. recv на сколько я знаю не возвращает управление до тех пор, пока не получит либо данные посланные sendом, либо сигнал о том, что клиент отключился. и всё. Как бы иначе по всем законам msdn он не может вернуть -1 пока я шнур из разетки не выдерну 8). так же яиспользую TCP протокол по этому коллизий быть не может.