После 6-7 часов нормальной работы, клиенты просто перестают соединяться с сервером. Помогает только пересоздание сокетов PHP: char szSendData[1024]; memset( szSendData, 0, sizeof(szSendData) ); char szRecvData[1024]; memset( szRecvData, 0, sizeof(szRecvData) ); sockaddr_in saddr; sockaddr_in claddr; servsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); memset( &saddr, 0, sizeof(sockaddr_in) ); CString szWorkedPort; pDialog->m_rules->m_workport.GetWindowText( szWorkedPort ); saddr.sin_family = AF_INET; saddr.sin_port = htons( atoi( szWorkedPort.GetBuffer() ) ); saddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); bind( servsock, (sockaddr *)&saddr, sizeof(sockaddr_in) ); int cllen = sizeof(sockaddr_in); g_startworked = GetCurrentTime2(); while( true ) { if(!isworked) { closesocket( servsock ); return 0; } memset( szRecvData, 0, sizeof(szRecvData) ); int packlen = recvfrom(servsock, szRecvData, sizeof(szRecvData), 0, (sockaddr *)&claddr, &cllen); if( packlen != -1 ) { //Тут код для работы с пакетами, разные условия и т.д. char pEndData[512]; memset( pEndData, 0, sizeof(pEndData) ); memcpy( pEndData, pHeader, sizeof(pHeader) ); memcpy( pEndData + sizeof(pHeader), pCommand, sizeof(pCommand) ); sendto( servsock, pEndData, 8 + strlen(pCommand), 0, (struct sockaddr *)&claddr, cllen); } } closesocket( servsock ); Подскажите, в чем может быть проблема.
что за переменная isworked ? Ситуации могут быть разные - например. При передачи или приеме данных отвалился килент (обрыв связи) - иии твой сервер повис (так как использует блокирующие сокеты). Советы: 1. Используй SO_KEEPALIVE 2. Проверяй передачу и прием данных (возможно не все данные передалисл или получились потому что произошло что-то) тобишь проверяй что возвращают функции приема и передачи. Почитай тут я описывал кое-что базовое http://habrahabr.ru/post/136041/ 3. Либо сервер пиши на основе epoll (http://stackoverflow.com/questions/67082/what-is-the-best-epoll-kqueue-select-equvalient-on-windows) либо обрабатывай каждого клиента в отдельном потоке - тогда не будет проблем с возможным зависанием. 4 Прочитай книжку о сетевом программировании (полезные ссылки я давал в статье на хабре)