Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.143.228.40] |
|
Сообщ.
#1
,
|
|
|
коллеги, всем привет
у меня почему accept зацикливается. код: SOCKET servsocket = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP ); //тут протоколы разные брал, не помогает if( servsocket == INVALID_SOCKET ) { CLogMessage::LogMessage( "Cannot create socket\n" ); } SOCKADDR_IN socketaddr; socketaddr.sin_family = AF_INET; socketaddr.sin_addr.s_addr = INADDR_ANY; socketaddr.sin_port = htons( portNumber ); if( bind( servsocket, (LPSOCKADDR)&socketaddr, sizeof(socketaddr) ) == SOCKET_ERROR ) { CLogMessage::LogMessage( "Cannot bind socket\n" ); } if( listen( servsocket, Backlog ) == SOCKET_ERROR ) { CLogMessage::LogMessage( "Cannot listen socket\n" ); } SOCKET acceptedSocket = 0; while( true ) { SOCKADDR_IN descr; int new_len = sizeof(SOCKADDR_IN);; acceptedSocket = accept( servsocket, (SOCKADDR *)&descr, &new_len ); //по идее тут должен "подвисать" только однажды, однако нифига, второй проход опять откуда то берёт accept //приняли данные, закрыли сокет, правда в другом потоке, если это важно // } всё дело происходит на локалхосте, может кто то подскажет чего я неправильно делаю? глаз замылился.... не можем же мы 2 раза одно и тоже соединение заакцептить, правильно? |
Сообщ.
#2
,
|
|
|
что accept возвращает, если ошибку(INVALID_SOCKET(0)) смотри WSAGetLastError().
что за клиент? В принципе нормальное действие клиента, после того как связь оборвалась, пытаться присоедениться еще раз |
Сообщ.
#3
,
|
|
|
сокет валидный и законный, WSAGetLastError() ничего не выдаёт
клиент самописный, отправляет порцию данных и закрывается, следующик коннект через большой промежуток времени. т.е. теоретически (!) он даже акцепиться не должнет, т.к. его вообще (теоретически) нету Добавлено чего то какая то мистика.. в какой то момент всё заработало нормально, но вот опять... пипец. что то какой то день сегодня тяжёлый... |
Сообщ.
#4
,
|
|
|
проверь sockaddr_in(айпи), который возвращает accept, хорошо бы отладчиком и там и там пройтись. По идее если accept срабатывает нормально, то значит кто то присоединяеться, осталось выяснить кто.
|
Сообщ.
#5
,
|
|
|
вот блин засада! оказывается я случайно использовал тот номер порта, который использует какой то наш внутренний сетевой вирус (не спрашивайте мне зачем мне вирус, он очень полезный (для кого то, кроме меня) ), он то ко мне и коннектился.
фуф, я уж думал что я рехнулся... |