Разъем не работает для iPhone SDK 3.0+ - PullRequest
0 голосов
/ 27 февраля 2010

Мой код работал абсолютно нормально до запуска iPhone SDK 3.0, я использую функции сокетов для отправки и получения данных. Какие изменения я должен сделать, чтобы сделать его совместимым для 3.0 +.

-(int)InitSocket:(int)nPort: (NSString*)sServer{

if(sServer == nil)
{
    return -1;
}
m_nPort = nPort;
sServerAddress = sServer;

const char* pServer = nil;
pServer = [sServer cStringUsingEncoding:NSASCIIStringEncoding];

m_nSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


struct sockaddr_in servAddr;
memset(&servAddr, 0 , sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(pServer);
servAddr.sin_port = htons(m_nPort);

pfd.fd = m_nSock;
pfd.events = POLLIN | POLLERR| POLLHUP | POLLNVAL;
pfd.revents = 0;

m_nTimeout = -1;

int f = fcntl(m_nSock, F_GETFL, 0);
fcntl(m_nSock, F_SETFL, f | O_NONBLOCK |O_NDELAY);

int opt = 1;
setsockopt(m_nSock, SOL_SOCKET, SO_KEEPALIVE, (const void*)&opt,(socklen_t)sizeof(opt));


struct timeval timeout;
fd_set wset;
FD_ZERO(&wset);
FD_SET(m_nSock, &wset);
timeout.tv_sec = 2;
timeout.tv_usec = 0;

return 0;

}

Этот код для отправки данных

-(int)SendData:(size_t) nSize: (NSString*) buffer{

int nTotalSent = 0;
const char *pSend =  [buffer cStringUsingEncoding:NSASCIIStringEncoding];

while(nTotalSent != nSize)
{
            int nSent = send(m_nSock, (const void*)pSend+nTotalSent, nSize-nTotalSent, 0);
    if(nSent == -1)
    {
        return nSent;
    }
    nTotalSent += nSent;
}

return nTotalSent;

}

Будет ли вышеуказанный код работать в iPhone SDK 3.0+, какие изменения мне нужно использовать, чтобы заставить его работать.

Спасибо

1 Ответ

4 голосов
/ 27 февраля 2010

Вы можете начать с правильной проверки ошибок. Все те функции, которые вы используете, возвращают код ошибки, если что-то пойдет не так, и вы никогда не узнаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...