Есть сервер и клиент, между ними тцп соединение, сервер закрыл соединение, как клиент узнает это не отправляя на сервер пакеты и ожидая ответ? //З.Ы. Примеры на делфе или С++ =)
на уровне сокетов - сделай например вызов recv считай 0 байт и посмотри что возвращает: если ошибку (-1), смотри ее в errno, или в WSAGetLastError() в win32. разрыв соединения с другой стороны это ECONNRESET и WSAECONNRESET соответственно.
Если "Сервер"(как программа) закрыл соединение TCP будет послан либо пакет с флагом RST либо пакет с флагом FIN.... все зависит от того как реализована схема на сервере, если она не реализована а кто-то просто вырубает серверное приложение то будет послан Ws2_32.dll пакет с флагом RST. единственный путь достичь отсутствие пакета о закрытии это взять и вытащить сетевой кабель из компа где запущено серверное приложение. (но это для шутникоффф ) Едиственно что тебе нужно обрабатывать FD_CLOSE, на асинхронных сокетах это делается выставлением .... int err=WSAAsyncSelect(socket,hWnd,TCPconst,FD_READ|FD_CLOSE); я данной функцией просто говорю что формировать для моего приложения сообщение с номером TCPconst которую свяжу с функцией обработчиком ( будут приходить FD_READ-все пакеты прочитанные сокетом FD_CLOSE-пакеты закрытия ) и в функции обработчике прооверять if(WSAGETSELECTEVENT(lParam)==FD_CLOSE) { // vot tut i budet zakritie so storoni servera } .... обычно встает обратная задача как серверу знать клиент жив или мертв(ведь пути "клиента" неисповедимы) к примеру вытащите кабель сетевой или вырубите "мопед" , позвоните другу и спросите "А я еще в Аське?" ... не сомневайтесь ответит Да! А потому схема ICQ реализована путем посылки "эдаких пингов от клиента серверу с ответами 00:15:41.681642 len:64 192.168.1.16:3430 -> 205.188.8.145:5190 (TCP)---AU ___________________________________________________________________ IP: IP-Version:4 Prioruty:normal TTL: 128 Protocol: TCP TCP: ACK Number: 3766973462 SEQ Number: 3489220673 Window: 30459 ___________________________________________________________________ 00 13 49 B3 1E E2 00 90 F5 51 9F B2 08 00 45 00 | .I³â.�õQŸ²..E. 00 32 EC 0A 40 00 80 06 76 B5 C0 A8 01 10 CD BC | .2ì.@.?.VµÀ¨.ͼ 08 91 0D 66 14 46 41 48 F9 CF 16 74 87 E0 50 18 | .‘.FFAHùÏT‡àP FB 76 C0 26 00 00 2A 05 36 0F 00 04 00 00 00 EE | ûVÀ&..*.6......î | ВОТ ТАКИХ! И ответов 00:15:41.825488 len:60 205.188.8.145:5190 -> 192.168.1.16:3430 (TCP)----U ___________________________________________________________________ IP: IP-Version:4 Prioruty:normal TTL: 110 Protocol: TCP TCP: ACK Number: 3656992833 SEQ Number: 3766973462 Window: 64 ___________________________________________________________________ 00 90 F5 51 9F B2 00 13 49 B3 1E E2 08 00 45 00 | .�õQŸ².I³â..E. 00 28 E3 A2 40 00 6E 06 91 27 CD BC 08 91 C0 A8 | .(ã¢@.N.‘'ͼ.‘À¨ 01 10 14 46 0D 66 16 74 87 E0 41 48 F9 D9 50 10 | .F.FT‡àAHùÙP 40 00 DC AB 00 00 00 00 00 00 00 00 | @.Ü«........ Разница по времени между пингами 4 минуты!