PDA

Просмотр полной версии : работа с сокетами в потоке



MakMen
17.07.2008, 19:36
Здравствуйте. В программе, под Linux на с++, создаю где 50-100 потоков в каждом:
{
tv.tv_sec=2;
tv.tv_usec=0;
setsockopt(pGPS->GPSsock,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv));
tv.tv_sec=2;
tv.tv_usec=0;
setsockopt(pGPS->GPSsock,SOL_SOCKET,SO_SNDTIMEO,&tv,sizeof(tv));
while(pGPS->EnableRD()==true) {
lengthIn=read(pGPS->GPSsock, bufIn, BUF_SIZE-1);
if ((errno!=11 & lengthIn<=0)| lengthIn==0)
{
pGPS->EnableRW(false);
return 1;
}
if (lengthIn>0) {
обрабатываем принятый буфер
}
if (есть что передать) {
if (write(pGPS->GPSsock,bufOut,bufLen)<0) pGPS->EnableRW(false);
}
}
}

есть подозрение что иногда read или write подвисает, не выходя по таймауту. Возможно ли это ?

MakMen
18.07.2008, 12:38
И вообще стоит ли завязывать блокировку-таймаут на read или народ делает по другому?